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'}]