我有两个包含词典的列表:
list105 = [
{'Country': 'Zimbabwe', 'GDP/Pop 2005': 281.0751453319367}
{'Country': 'Zambia', 'GDP/Pop 2005': 654.055392253311}
{'Country': 'Congo (Dem. Rep.)', 'GDP/Pop 2005': 115.37122637190915}
]
list202 = [
{'Country': 'Vietnam', 'GDP/Pop 2002': 633.4709249146734}
{'Country': 'Zambia', 'GDP/Pop 2002': 1198.4556066429468}
{'Country': 'Vanuatu', 'GDP/Pop 2002': 1788.4344216880352}
]
是否可以遍历两个字典列表,匹配“Country”键,并将任一字典中的所有唯一键附加到第三个列表中创建的新字典中?从上面开始,第三个列表将包含:
list2and3 = [
{'Country': 'Zambia', 'GDP/Pop 2005': 654.055392253311, 'GDP/Pop 2002': 1198.4556066429468}
]
我开始使用类似的东西:
list2and3 = []
for line in list105:
for row in list202:
if line['Country'] == row['Country']:
#do something and append to list2and3
答案 0 :(得分:1)
将第一个列表转换为dict:
d = {x['Country']:x for x in list105}
然后迭代第二个列表并将数据添加到dict:
for item in list202:
key = item['Country']
if key in d:
d[key].update(item)
else:
d[key] = item
最后,应用.values()
将dict转换回列表:
newlist = d.values()
注意:此数据结构不是最佳的,请考虑重新考虑它。
答案 1 :(得分:0)
from copy import deepcopy
list2and3 = []
for line in list105:
for row in list202:
if line['Country'] == row['Country']:
dic = deepcopy(line) # creates a deepcopy of row, so that the
dic.update(row) # update operation doesn't affects the original object
list2and3.append(dic)
print list2and3
<强>输出:强>
[{'Country': 'Zambia', 'GDP/Pop 2005': 654.055392253311, 'GDP/Pop 2002': 1198.4556066429468}]
答案 2 :(得分:0)
你可能想要一个没有循环的更好的解决方案。
[x for x in list105 for y in list202 if x['Country'] == y['Country'] and x != y and not x.update(y)]
1列表理解可以引导您回答,但可能不是人性化的。只需选择你喜欢的。