我正在创建一个程序,其中包含一个包含部门和人员的词典,例如,此处的词典:
{"local": ["admin", "userA"],
"public": ["admin", "userB"],
"administrator": ["admin"] }
然后返回一个字典,其中所有用户作为键,他们所在的部门列表作为值。
例如,先前给定列表的输出应为:
{"admin" : ["local", "public", "administrator"],
"userA" : ["local"],
"userB" : ["public"]}
以下是我的尝试:
def groups_per_user(group_dictionary):
user_groups = {}
# Go through group_dictionary
user_groups["admin"] = []
user_groups["userA"] = []
user_groups["userB"] = []
for x in group_dictionary.values():
# Now go through the users in the group
for user in x:
if user in group_dictionary["local"]:
user_groups[user].append("local")
elif user in group_dictionary["public"]:
user_groups[user].append("public")
elif user in group_dictionary["administrator"]:
user_groups[user].append("administrator")
# Now add the group to the the list of
# groups for this user, creating the entry
# in the dictionary if necessary
return(user_groups)
print(groups_per_user({"local": ["admin", "userA"],
"public": ["admin", "userB"],
"administrator": ["admin"] }))
但是,我得到了以下输出:
{'admin': ['local', 'local', 'local'],
'userA': ['local'],
'userB': ['public']}
此外,我还在代码的第5-7行定义函数中的用户。我该怎么做才能确保我的代码适用于任何给定的部门和用户?
例如,一个用户调用 "owner"
还有一个部门叫 "groupWorkspace"
不起作用,因为我没有在代码中定义它们。有人能解释一下如何解决这个问题吗?
3条答案
按热度按时间d6kp6zgx1#
使用
dict.setdefault
我们可以很容易地做到这一点:输出:
rryofs0p2#
这是一个非常糟糕的方法,但我希望你能理解你错在哪里。管理员总是在本地,所以
elif
对于public和administrator,将永远不会运行一行只是为了好玩
50pmv0ei3#
我不认为这是“最佳”或最有效的解决方案。不过,我确实希望逻辑清晰,易于理解。
以下代码的结果是:
最后,如果您的输入数据不是唯一的,则执行重构并可能删除重复项的代码。