首页 > 解决方案 > PYTHON:我如何以最 Pythonic 的方式将两个字典合并到一个列表中

问题描述

我有一个清单

result = [
    {
        "name": "James",
        "label":"Student",
        "class": 18
    },
    {
        "name": "Jacob",
        "label":"Professor",
        "class": 18
    },
    {
        "name": "Jeff",
        "label":"Student",
        "class": 19
    }
]

我想合并两个同一个类的字典

我努力了:

res = [{item['label']:item['name'],'class':item['class']} for item in result]

print(res)

>>[{'Student': 'James', 'class': 18}, {'Professor': 'Jacob', 'class': 18}, {'Student': 'Jeff', 'class': 19}] 

所需输出的样本:

result = [
    {
        "Student": "James",
        "Professor": "Jacob",
        "class": 18
    },
    {
        "Student": "Jeff",
        "class": 19
    }
]

有人可以帮我解决这个问题吗?先感谢您

标签: pythonlistdictionary

解决方案


定义一个名为的函数,merge并创建一个字典merged来跟踪访问过的类,然后每当出现具有相同类的记录时,我们只需使用以下键值对更新该类的字典label-name

def merge(dicts):
    merged = {}
    for d in dicts:
        key = d['class']
        if key in merged:
            merged[key][d['label']] = d['name']
        else:
            merged[key] = {'class': d['class'], d['label']: d['name']}
    return list(merged.values())

结果:

# print(merge(result))

[{'Student': 'James', 'class': 18, 'Professor': 'Jacob'}, {'Student': 'Jeff', 'class': 19}]

推荐阅读