2013-06-03 142 views
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 
+0

這兩個普通的字典碰巧是在同一個索引?或者僅僅是爲了這個例子 – TerryA

+1

不會像'list2and3 = [{'Country':'贊比亞','GDP/Pop':{'2002':1198.4556066429468,'2005':654.055392253311}}]這樣的數據結構'更有意義?填充這個結構會容易得多。 –

+0

您的輸入未正常化。你沒有向我們展示真實的數據集?或者'list105 = [('津巴布韋','281 ...'),甚至'津巴布韋':'281 ...'}是更好的代表嗎? –

回答

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

這種方法可能需要很長時間才能在循環中循環。 – mawimawi

0

您可能希望沒有循環的更好解決方案。

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

1 list comprehesion可以引導您回答,但它可能不是人性化的。只要選擇你喜歡的。

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() 

注意:此數據結構是次優的,請考慮重新考慮它。