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
并将其附加到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'}]
谢谢!
答案 0 :(得分:1)
如果我的理解正确,您想将list2
中的每个字典与list1
键中的相同值联接到age
中的字典中。
尝试这样的事情
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))
请记住,list1
中的词典将被修改,并且如果list2
中的多个词典具有相同的age
,则只会使用第一个。
答案 1 :(得分:0)
Python 2 操作如下
for d in list1:
for e in list2:
if d['age'] == e['age']:
d.update(e)
Python 3 您可以一行写为
[{**d, **e} if d['age'] == e['age'] else d for d in list1 for e in list2]
答案 2 :(得分:0)
您可以操纵词典列表,但是出于实际目的,这并不是您要执行的操作的最有效或最适应的结构。
如果您愿意使用第三方库,则可以使用Pandas和pd.DataFrame.merge
:
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'}]