我有第一个这样的列表
[{"name":"jon", "age":10}, {"name":"mary", "age":12}]
第二个列表如此
[{"city":"nyc"}, {"city":"la"}]
并希望将它们组合成一个单词列表。假设它们的长度相同。
[{"name":"jon", "age":10, "city":"nyc"}, {"name":"mary", "age":12, "city":"la"}]
谢谢!
答案 0 :(得分:7)
使用list comprehension
:
>>> lis1 = [{"name":"jon", "age":10}, {"name":"mary", "age":12}]
>>> lis2 = [{"city":"nyc"}, {"city":"la"}]
>>> [dict(x, **y) for x, y in zip(lis1, lis2)]
[{'city': 'nyc', 'age': 10, 'name': 'jon'}, {'city': 'la', 'age': 12, 'name': 'mary'}]
作为Guido dislikes dict(x, **y)
,另一个选项是:
>>> [dict(x.items() + y.items()) for x, y in zip(lis1, lis2)]
[{'city': 'nyc', 'age': 10, 'name': 'jon'}, {'city': 'la', 'age': 12, 'name': 'mary'}]
答案 1 :(得分:3)
还简单地说:
for i in xrange(len(x)):
x[i].update(y[i])
答案 2 :(得分:2)
三种新方式,所有直接变体:
from collections import ChainMap
first = [{"name":"jon", "age":10}, {"name":"mary", "age":12}]
second = [{"city":"nyc"}, {"city":"la"}]
首先:
map(ChainMap, first, second)
#>>> <map object at 0x7fee1c53ddd0>
请注意,此不会复制对象。如果您需要在实际列表中:
[ChainMap(f, s) for f, s, in zip(first, second)]
#>>> [ChainMap({'name': 'jon', 'age': 10}, {'city': 'nyc'}), ChainMap({'name': 'mary', 'age': 12}, {'city': 'la'})]
如果您需要复制:
[dict(ChainMap(f, s)) for f, s, in zip(first, second)]
#>>> [{'name': 'jon', 'age': 10, 'city': 'nyc'}, {'name': 'mary', 'age': 12, 'city': 'la'}]
老实说,这似乎比dict(first.items() + second.items())
更好,而且也很稳定。