[英]dictionary iteration in python
users = [
{'name': 'user1', 'role': ['Consumer']},
{'name': 'user2', 'role': ['Developer', 'Support Engineer', 'Consumer']},
{'name': 'user3', 'role': ['UX Designer', 'Architect']},
{'name': 'user4', 'role': ['Architect']},
{'name': 'user5', 'role': ['Consumer']}
]
我需要迭代上面的列表並打印如下: [{"role": "consumer", "users": ["user1", "user2"]}]
基本上顛倒上面的列表,任何幫助將不勝感激。
您可以遍歷您的users
,構建一個中間字典,並將其轉換為您想要的json
格式。
from collections import defaultdict
roles = defaultdict(list)
for user in users:
roles[user["role"]].append(user["name"])
roles_json = [
{"role": k, "users": v}
for k, v in roles.items()
]
pandas 中可能有非常簡單的軸翻轉,但簡單的方法是:
users = [ ... ] # your existing list
users_by_role = {}
for d in users:
name, roles = d['name'], d['role']
for role in roles:
users_by_role.setdefault(role, []).append(name)
result = [{'role': role, 'users': users} for role, users in users_by_role.items()]
所以我認為這與印刷無關。 您想將您的用戶列表轉換為“角色”列表,例如:
def transform_to_role_list(users):
roles_map = {}
for user in users:
for role in user['role']:
if role in roles_map:
roles_map[role].add(user['name'])
else:
roles_map[role] = {user['name']}
return [{'role': role, 'users': list(user_set)} for role, user_set in roles_map.items()]
In [1]: transform_to_role_list(users)
Out[1]:
[{'role': 'Consumer', 'users': ['user2', 'user1', 'user5']},
{'role': 'Developer', 'users': ['user2']},
{'role': 'Support Engineer', 'users': ['user2']},
{'role': 'UX Designer', 'users': ['user3']},
{'role': 'Architect', 'users': ['user3', 'user4']}]
請注意,roles_map 可能對您來說更有用(就像用戶地圖一樣)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.