首页 > 解决方案 > 在python中合并两个列表

问题描述

我有一个简单的任务,但无法弄清楚。

a = [{'name': 'Helen', 'age': '12', 'total_money':'12000'}, {'name': 'Victor', 'age':'20', 'total_money': '32999'}]
b = [{'name': 'Helen', 'age': '12', 'total_gold':'14'}]

我只想在上面列出,如果 和 的值name相同,age则将其组合在一起。如果不一样,请保持原样。

预期产出

output = [{'name': 'Helen', 'age': '12', 'total_money':'12000', 'total_gold':'14'}, {'name': 'Victor', 'age':'20', 'total_money': '32999'}]

这是我迄今为止尝试过的(不工作)

c = a + b
data = {}
for item in c:
    key = item["name"]+'-'+item["age"]
    if key in data:
        if data[key]["total_money"] in data[key]:
            data[key]["total_gold"] = item["total_gold"]
        else:
            data[key]["total_money"] = item["total_money"]
    else:
        data[key] = item
        data[key]["total_money"] = item['total_money'] if 'total_money' in item else 0
        data[key]["total_gold"] = item['total_gold'] if 'total_gold' in item else 0

我有一种感觉,我想多了。任何建议将不胜感激。谢谢你。

标签: python

解决方案


好像你想合并两个字典,可以这样做:

a = {'name': 'Helen', 'age': '12', 'total_money':'12000'}
b = {'name': 'Helen', 'age': '12', 'total_gold':'14'}

z = {**a, **b}
z
{'name': 'Helen', 'age': '12', 'total_money': '12000', 'total_gold': '14'}

如果您想维护列表结构(假设您计划将多个字典作为这些列表的元素):

a = [{'name': 'Helen', 'age': '12', 'total_money':'12000'}]
b = [{'name': 'Helen', 'age': '12', 'total_gold':'14'}]

z = []
for i in range(len(a)):
    z.append({**a[i], **b[i]})

编辑:

z = []
for ele in a:
    for piece in b:
        if ele["name"] == piece["name"] and ele["age"] == piece["age"]:
            z.append({**ele, **piece})
        else:
            z.append(ele)

推荐阅读