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']}
uj5u.com熱心網友回復:
改變
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 )
uj5u.com熱心網友回復:
讓我們看看如何簡化它。首先,我們將獲得一組所有用戶名。
>>> 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))
現在,我們將使用字典推導和dand users。以及里面的串列理解,以查找與給定用戶名關聯的所有角色。
>>> {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']}
>>>
uj5u.com熱心網友回復:
dict.setdefault或者collections.defaultdict在這里作業得很好。如果 key 尚未存在(您設定為默認值),則dict.setdefault方法設定。然后在每次迭代中,您只需將組名附加到適當的用戶。所以只需更換user_groups[key]=defaultuser_groups[]
if user not in user_groups:
new_user_groups = {user: group}
user_groups.update(new_user_groups)
else:
user_groups[user] = group
和
user_groups.setdefault(user, []).append(group)
您的功能將產生預期的結果。
如果您更喜歡使用collections.defaultdict,您可以如下修改您的功能。與 類似dict.setdefault,collections.defaultdict為不存在的鍵提供默認值。您可以通過將串列建構式傳遞給 將空串列初始化為默認值collections.defaultdict。
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)
輸出:
{'admin': ['local', 'public', 'administrator'], 'userA': ['local'], 'userB': ['public']}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/407304.html
標籤:
上一篇:使用兩個串列python創建表
