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

时间:2018-09-11 22:08:27

标签: python list dictionary

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

谢谢!

3 个答案:

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