2013-10-01 101 views
1

Python字典,我有兩個數組如下:用的鍵重複和值

a=['history','math','history','sport','math'] 
b=['literature','math','history','history','math'] 

我拉上兩個數組,並使用字典,看看是否鍵和值相等打印我他們,但字典中沒有打印重複的情況下,它只打印一個,我需要所有這些,因爲我需要重複的次數。

我的代碼:

combined_dict={} 
for k , v in zip(a,b): 
    combined_dict[k]=v 
    print(combined_dict) 

回答

6

在字典中,沒有重複的鑰匙。所以當你在第一次循環後有{'history':'literature'}時,它將被{'history':'history'}覆蓋。

而不是創建一本字典,爲什麼不通過zip(a, b)循環?

for k, v in zip(a, b): 
    if k == v: 
     print(k, v) 

如果你想有多個值的一個鍵,然後你可以從collections模塊使用defaultdict

>>> from collections import defaultdict 
>>> d = defaultdict(list) 
>>> for k, v in zip(a, b): 
...  d[k].append(v) 
... 
>>> print(d) 
defaultdict(<type 'list'>, {'sport': ['history'], 'math': ['math', 'math'], 'history': ['literature', 'history']}) 
>>> print(list(d.items())) 
[('sport', ['history']), ('math', ['math', 'math']), ('history', ['literature', 'history'])] 
>>> for k, v in d.items(): 
...  if k in v: 
...   print k, v 
... 
math ['math', 'math'] 
history ['literature', 'history'] 
+0

謝謝you.your第一個建議正常工作,這就是我的意思。那麼請你告訴我如何將所有結果項目保存在一個列表中,以便計算該列表中的項目的最終數量? – Basira

+0

@Basira在另一個列表中放置一個列表?你可以做'a.extend(b)' – TerryA

1

一個dict不能有兩個條目相同的密鑰。對於具有相同鍵的多個值,您需要一個帶有列表作爲值的字典。

試試這個:

from collections import defaultdict 
a=['history','math','history','sport','math'] 
b=['literature','math','history','history','math'] 
combined_dict = defaultdict(list) 
for k, v in zip(a,b): 
    combined_dict[k].append(v) 

print combined_dict 
0

如果你想獲得的所有項目,其中有兩個列表之間的匹配的列表,請嘗試

>>> print [k for k, v in zip(a, b) if k == v] 
    ['math', 'history', 'math'] 

這給你的列表匹配項目,然後您可以進一步處理。