Python 如何比较两个列表值并将该值附加到新列表中?

Python 如何比较两个列表值并将该值附加到新列表中?,python,list,dictionary,Python,List,Dictionary,下面是两个列表,我想比较每个匹配列表中的年龄,并将其附加到列表1中。你们能帮我吗 结果应该是 list1 = [{'name': 'Tyler', 'age': '12', 'city': 'SF'}, {'name': 'Caitlyn', 'age': '10', 'city': 'SJ'}] list2 = [{'age': '12', 'hobby': 'soccer', 'song': 'Abba'}, {'age': '10', 'hobby': 'baseball', 'song'

下面是两个列表,我想比较每个匹配列表中的
年龄
,并将其附加到列表1中。你们能帮我吗

结果应该是

list1 = [{'name': 'Tyler', 'age': '12', 'city': 'SF'}, {'name': 'Caitlyn', 'age': '10', 'city': 'SJ'}]
list2 = [{'age': '12', 'hobby': 'soccer', 'song': 'Abba'}, {'age': '10', 'hobby': 'baseball', 'song': 'Punk'}]

谢谢

如果我理解正确,您希望使用
age
键中的相同值将
list2
中的每个词典加入
list1
中的词典

试试这样的

list1 = [{'name': 'Tyler', 'age': '12', 'city': 'SF', 'age': '12', 'hobby': 'soccer', 'song': 'Abba'}, {'name': 'Caitlyn', 'age': '10', 'city': 'SJ', 'age': '10', 'hobby': 'baseball', 'song': 'Punk'}]

请记住,
list1
中的词典将被修改,如果
list2
中的多个词典具有相同的
年龄,则只会使用第一个词典。

Python 2操作如下

def join_by_age(list1, list2):
    for item1 in list1:
        for item2 in list2:
            if item1['age'] == item2['age']:
                item1.update(item2)
                break
    return list1

# Join the two lists.
print(join_by_age(list1, list2))
Python 3您可以在一行中编写

for d in list1:
    for e in list2:
        if d['age'] == e['age']:
            d.update(e)

您可以操作字典列表,但出于实际目的,这并不是最有效或适应性最强的结构

如果您愿意使用第三方库,您可以使用Pandas和:

然后,您可以输出数据帧或字典列表:

import pandas as pd

res = pd.DataFrame(list1).merge(pd.DataFrame(list2))

你为什么不在任何东西上加上12岁?@coldspeed我认为这是为什么编程比手工输入更好的一个经典案例。我认为这只是人为的错误@coldspeed dang ninja编辑zip中d1、d2的
[{**d1,**d2}(列表1,列表2),如果d1['age']==d2['age']]
只想比较相同位置的条目。如果列表中的词典可能无序,那么如果d1['age']==d2['age'],您可以改为列表1中d1的
[{**d1,**d2}对于列表2中的d2
最好提到
update()
实际上修改了列表中的字典,因此它会改变输入。
import pandas as pd

res = pd.DataFrame(list1).merge(pd.DataFrame(list2))
print(res)

  age city     name     hobby  song
0  12   SF    Tyler    soccer  Abba
1  10   SJ  Caitlyn  baseball  Punk

print(res.to_dict('records'))

[{'age': '12', 'city': 'SF', 'name': 'Tyler', 'hobby': 'soccer', 'song': 'Abba'}, 
 {'age': '10', 'city': 'SJ', 'name': 'Caitlyn', 'hobby': 'baseball', 'song': 'Punk'}]