重复键和值的python字典

时间:2013-10-01 11:30:35

标签: 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)

3 个答案:

答案 0 :(得分:7)

在词典中,没有重复的键。因此,当您在第一个循环后{'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']

答案 1 :(得分:1)

dict两个条目的密钥不能相同。对于具有相同键的多个值,您需要一个带有列表值的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

答案 2 :(得分:0)

如果您想获得所有项目的列表,两个列表之间匹配,请尝试

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

这将为您提供匹配项目列表,然后您可以进一步处理这些项目。