2013-10-01 72 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'] 

这给你的列表匹配项目,然后您可以进一步处理。