添加新值作为Python中的字典值列出

问题描述 投票:0回答:2

问题是: 用户可以属于多个组。填写空白以返回

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

我明白了

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

我也尝试使用此代码来避免使用括号


> new_group = {user: [x,group]}
> 
> new_group = {user: [str(x).lstrip('[').rstrip(']'),group]}

这次我得到:

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

两次均无效。

有更好的方法吗?

提前感谢大家的帮助

python
2个回答
6
投票

首先

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']}

0
投票

您可以使用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" ]}))
© www.soinside.com 2019 - 2024. All rights reserved.