【问题标题】:Turn values of dictionnary into list将字典的值转换为列表
【发布时间】:2026-01-30 03:15:01
【问题描述】:

groups_per_user 函数接收一个字典,其中包含组名和用户列表。用户可以属于多个组。填空返回一个字典,其中用户作为键,他们的组列表作为值。

这就是我所做的,但我没有得到预期的结果。

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:
                new_user_groups = {user: group}
                user_groups.update(new_user_groups)
            else:
                user_groups[user] += group
    return(user_groups)
print(groups_per_user({"local": ["admin", "userA"],
          "public":  ["admin", "userB"],
          "administrator": ["admin"] }))

 # it gave me this:
 {'admin': 'localpublicadministrator', 'userA': 'local', 'userB': 'public'}

 #but I want this:
 {'admin': ['local', 'public', 'administrator'], 'userA': ['local'], 'userB': ['public']}

【问题讨论】:

    标签: python list dictionary


    【解决方案1】:

    改变

                    new_user_groups = {user: group}
                    user_groups.update(new_user_groups)
                else:
                    user_groups[user] += group
    

                    user_groups[user] = [group]
                else:
                    user_groups[user].append( group )
    

    【讨论】:

      【解决方案2】:

      让我们看看如何简化它。首先,我们将获得一组所有用户名。

      >>> d = {"local": ["admin", "userA"],
      ...           "public":  ["admin", "userB"],
      ...           "administrator": ["admin"] }
      >>> set(x for lst in d.values() for x in list(lst))
      {'userB', 'admin', 'userA'}
      >>> users = set(x for lst in d.values() for x in list(lst))
      

      现在,我们将使用字典推导以及dusers。以及一个列表解析,用于查找与给定用户名关联的所有角色。

      >>> {name: [k for k, v in d.items() if name in list(v)] for name in users}
      {'userB': ['public'], 'admin': ['local', 'public', 'administrator'], 'userA': ['local']}
      >>>
      

      【讨论】: