Python将两个不等长的字典列表组合成一个基于键的列表

时间:2018-06-17 09:11:14

标签: python data-structures collections cassandra

我正在使用cassandra和python,我正在一起执行两个查询。我想使用列作为键将结果的结果组合成一个列表。

list1 = [{'firstname':'foo','lastname':'bar','id':1},{'firstname':'foo2','lastname':'bar2','id':2}]
list2 = [{'text':'sample','contact_no':'666','id':1},{'text':'sample2','contact_no':'111','id':1}, {'text':'sample3','contact_no':'121','id':2}]

我想使用 id 键将这两个列表组合在一起作为条件

预期结果

[{'firstname':'foo','lastname':'bar','id':1,'text':'sample','contact_no':'666'}, {'firstname':'foo','lastname':'bar','id':1,'text':'sample2','contact_no':'111'},{'firstname':'foo2','lastname':'bar2','id':2,'text':'sample3','contact_no':'121'}]

请告诉我如何以最pythonic的方式做到这一点。提前致谢。

1 个答案:

答案 0 :(得分:2)

这是一种方式:

import itertools

list1 = [{'firstname':'foo','lastname':'bar','id':1},
         {'firstname':'foo2','lastname':'bar2','id':2}]
list2 = [{'text':'sample','contact_no':'666','id':1}, 
         {'text':'sample2','contact_no':'111','id':1}, 
         {'text':'sample3','contact_no':'121','id':2}]

lst = []
for x, y in itertools.product(list1, list2):
    if x['id'] == y['id']:
        c = x.copy()
        c.update(y)
        lst.append(c)

print(lst)
# [{'firstname': 'foo', 'lastname': 'bar', 'id': 1, 'text': 'sample', 'contact_no': '666'}, 
#  {'firstname': 'foo', 'lastname': 'bar', 'id': 1, 'text': 'sample2', 'contact_no': '111'}, 
#  {'firstname': 'foo2', 'lastname': 'bar2', 'id': 2, 'text': 'sample3', 'contact_no': '121'}]