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()
]

熊猫可能有非常简单的轴翻转,但最简单的方法是:

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可能对您更有用(就像用户地图一样(

最新更新