在python中将新值作为字典值添加到列表中

在python中将新值作为字典值添加到列表中,python,Python,我现在正在学习python课程,我有一个练习,我根本没有得到答案。我希望你能帮我解决这个简单的问题 问题是: 用户可以属于多个组。填空返回一个字典,其中用户为键,组列表为值 我试着做这个练习,但电脑不知道我的答案是有效的。我认为这是因为括号 这是我的密码:- def groups_per_user(group_dictionary): user_groups = {} for group, user in group_dictionary.items():

我现在正在学习python课程,我有一个练习,我根本没有得到答案。我希望你能帮我解决这个简单的问题

问题是: 用户可以属于多个组。填空返回一个字典,其中用户为键,组列表为值

我试着做这个练习,但电脑不知道我的答案是有效的。我认为这是因为括号

这是我的密码:-

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"] }))
我得到

{'admin': [['local', 'public'], 'administrator'], 'userA': 'local', 'userB': 'public'}
我试图用这个代码来避免括号

这次我得到:

{'admin': ["'local', 'public'", 'administrator'], 'userA': 'local', 'userB': 'public'}
两次都无效

有更好的办法吗

首先感谢大家的帮助

for user in user:
将覆盖迭代变量。不要这样做

第二:

user_groups[user] = group
这将用户映射到组。相反,您可以使用直接在此处创建组列表

user_groups[user] = [group] # single element list
最后:

x = user_groups[user]
new_group={}
new_group = {user: [x,group]}
user_groups.update(new_group)
这些都不是必需的。您只需使用以下命令将新组附加到现有用户列表中:

user_groups[user].append(group)
这给了我们:

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"]}))
输出:

{'admin': ['local', 'public', 'administrator'], 'userA': ['local'], 'userB': ['public']}

您可以使用defaultdict来实现这一点,并避免使用if-else条件

from  collections import defaultdict

def groups_per_user(group_dictionary):
    user_groups = defaultdict(list)
    for group, users in group_dictionary.items():

        for user in users:
            user_groups[user].append(group)
    return user_groups  # return dict(user_groups) if you want it to be returned in dict format


print(groups_per_user({"local": ["admin", "userA"],
                       "public": ["admin", "userB"],
                       "administrator": ["admin" ]}))

如果userA的组计数仅为1,您希望得到什么样的结果?[本地]还是本地?谢谢您的回复。我刚开始学习,我有很多新手犯的错误,比如for循环。我真的想像你说的那样创建一个列表,但我做不到。我忘记了组中的[],之后当我尝试使用.appendgroup时,它说语法错误。但现在我知道怎么做了。谢谢你我不知道,也谢谢你
from  collections import defaultdict

def groups_per_user(group_dictionary):
    user_groups = defaultdict(list)
    for group, users in group_dictionary.items():

        for user in users:
            user_groups[user].append(group)
    return user_groups  # return dict(user_groups) if you want it to be returned in dict format


print(groups_per_user({"local": ["admin", "userA"],
                       "public": ["admin", "userB"],
                       "administrator": ["admin" ]}))