重复键和值的python字典

python dictionary with repetition of key and value

我有两个数组,如下所示:

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

我压缩了两个数组,并使用字典来查看键和值是否相等打印它们,但是字典没有打印重复的案例,它只打印一个案例,我需要所有案例,因为我需要重复的时间。

我的代码:

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


在字典中,没有重复的键。所以当你在第一个循环之后有了{'history':'literature'},它将被{'history':'history'}覆盖。

为什么不通过zip(a, b)循环而不是创建字典呢?

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

如果您希望一个键有多个值,那么可以使用来自collections模块的defaultdict

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> 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']


对于两个条目,dict不能具有相同的键。对于具有相同键的多个值,需要一个列表作为值的dict。

试试这个:

1
2
3
4
5
6
7
8
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


如果要获取所有项目的列表,并且两个列表之间存在匹配项,请尝试

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

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