python - 如何将值分配给字典中的键?解决算法
问题描述
groups_per_user 函数接收一个字典,其中包含组名和用户列表。就像 Linux 系统中的组一样。用户可以属于多个组。填写空白以返回一个字典,其中用户作为键,他们的组列表作为值。
基本上我正在尝试将组分配给用户而不是用户分配给组
这就是我到目前为止所尝试的:
def groups_per_user(group_dictionary):
user_groups = {}
groups = []
# Go through group_dictionary
for group,users in group_dictionary.items():
# Now go through the users in the group
for user in users:
# Now add the group to the list of
# groups for this user, creating the entry
# in the dictionary if necessary
groups.append(group)
user_groups[user] = group
return(user_groups)
print(groups_per_user({"local": ["admin", "userA"],
"public": ["admin", "userB"],
"administrator": ["admin"] }))
如何遍历抛出列表,同时尽可能高效地将用户添加到组名中?
请原谅我的语法,这是我的第一个问题。谢谢
解决方案
您的代码的问题是只有一个groups
列表,而您真正想要的是每个用户的组列表。试试这个
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] = []
user_groups[user].append(group)
return user_groups
setdefault
或者,我们可以用调用替换这三行:
def groups_per_user(group_dictionary):
user_groups = {}
for group, users in group_dictionary.items():
for user in users:
user_groups.setdefault(user, []).append(group)
return user_groups
第三种选择是使用默认字典:
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
推荐阅读
- sql - 查询如何工作?
- android - 如何检查android设备是否有来自服务器的互联网连接?
- c++ - 全局变量 (C/C++)
- node.js - 如何在 MongoDB 中创建动态查询?
- android - 仅在比其所在位置高 1 个单元格或低 1 个单元格的位置选择演员
- php - 如何检查状态并从后台php中的服务器链接下载文件
- excel - 无法计算出用户表单 Excel 上的“范围。查找”下一个单元格
- jenkins - 如何与詹金斯团队分享 mercurial hooks
- clojurescript - 多面板重构未按预期工作
- python - xarray DataArray.sel 返回最初未分配给数据的坐标