簡體   English   中英

python 中的字典迭代

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM