2

我有两个包含字典的列表:

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

是否可以遍历两个字典列表,匹配“国家”键,并将任一字典中的所有唯一键附加到在第三个列表中创建的新字典中?例如,从上面开始,第三个列表将包含:

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
4

3 回答 3

1

将第一个列表转换为字典:

d = {x['Country']:x for x in list105}

然后迭代第二个列表并将数据添加到字典中:

for item in list202:
    key = item['Country']
    if key in d:
        d[key].update(item)
    else:
        d[key] = item

最后,申请.values()将字典转换回列表:

newlist = d.values()

注意:这个数据结构是次优的,考虑重新考虑它。

于 2013-06-03T09:25:07.230 回答
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}]
于 2013-06-03T08:14:07.590 回答
0

您可能想要一个没有循环的更好的解决方案。

[x for x in list105 for y in list202 if x['Country'] == y['Country'] and x != y and not x.update(y)]

1 列表理解可以引导您找到答案,但它可能对人类不友好。只要选择你喜欢的。

于 2013-06-03T09:22:03.697 回答