2

我有两个数组如下:

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

3 回答 3

7

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

与其创建字典,不如直接遍历zip(a, b)?

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

如果您想为一个键设置多个值,则可以使用defaultdict模块中的 a collections

>>> 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']
于 2013-10-01T11:36:05.857 回答
1

对于两个条目, Adict不能具有相同的键。对于具有相同键的多个值,您需要一个以列表为值的字典。

尝试这个:

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
于 2013-10-01T11:36:11.990 回答
0

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

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

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

于 2013-10-01T11:56:04.800 回答