0 python
我现在正在做 python 的课程,我有一个练习,我根本没有得到答案。我希望你能帮我解决这个简单的问题。
该问题是:用户可以属于多个组。填空以返回 a dictionary,以用户为键,以用户组列表为值。
我试图做这个练习,但计算机没有将我的答案识别为有效。我认为这是因为brackets.
这是我的代码:-
def groups_per_user(group_dictionary):
   user_groups = {}
    for group, user in group_dictionary.items():
    
        for user in user:
            if user not in user_groups:
                user_groups[user] = group
            else:
                
                x = user_groups[user]
                new_group={}
                new_group = {user: [x,group]}
                
                user_groups.update(new_group)
                
    return(user_groups)
print(groups_per_user({"local": ["admin", "userA"],
        "public":  ["admin", "userB"],
        "administrator": ["admin"] }))
Run Code Online (Sandbox Code Playgroud)
我得到
{'admin': [['local', 'public'], 'administrator'], 'userA': 'local', 'userB': 'public'}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用此代码避免使用括号
> new_group = {user: [x,group]}
> 
> new_group = {user: [str(x).lstrip('[').rstrip(']'),group]}
Run Code Online (Sandbox Code Playgroud)
这次我得到:
{'admin': ["'local', 'public'", 'administrator'], 'userA': 'local', 'userB': 'public'}
Run Code Online (Sandbox Code Playgroud)
两次都无效。
有没有更好的办法?
预先感谢大家的帮助
首先
for user in user:
Run Code Online (Sandbox Code Playgroud)
将覆盖迭代变量。不要这样做。
第二:
user_groups[user] = group
Run Code Online (Sandbox Code Playgroud)
这会将用户映射到组。相反,您可以直接在此处创建组列表
user_groups[user] = [group] # single element list
Run Code Online (Sandbox Code Playgroud)
最后:
x = user_groups[user]
new_group={}
new_group = {user: [x,group]}
user_groups.update(new_group)
Run Code Online (Sandbox Code Playgroud)
这些都不是必需的。您可以简单地将新组附加到现有用户列表中:
user_groups[user].append(group)
Run Code Online (Sandbox Code Playgroud)
这给了我们:
def groups_per_user(group_dictionary):
    user_groups = {}
    for group, users in group_dictionary.items():
        for user in users:
            if user not in user_groups:
                user_groups[user] = [group]
            else:
                user_groups[user].append(group)
    return user_groups
print(groups_per_user({"local": ["admin", "userA"],
                       "public": ["admin", "userB"],
                       "administrator": ["admin"]}))
Run Code Online (Sandbox Code Playgroud)
输出:
{'admin': ['local', 'public', 'administrator'], 'userA': ['local'], 'userB': ['public']}
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           61 次  |  
        
|   最近记录:  |