当我使用dict和zip将列表映射到字典时不一致 - Python

时间:2011-08-20 20:42:17

标签: python list dictionary

我尝试了这个例子并且工作正常:Map two lists into a dictionary in Python

但如果我用这个列表替换“keys”: ['2','3','2','3','4','2','4','2','2','3','2','3',' 4' ]

和“值”与此列表: [2,3,4,5,6,4,2,1,1,2,3,4,5]

dict类试图单独制作一个“值”部分的字典!

输出: {'3':4,'2':3,'4':5}

自己尝试一下,你应该得到同样的答案。为什么和替代这将是伟大的。

3 个答案:

答案 0 :(得分:7)

您的密钥列表具有重复值,因此会覆盖早期重复密钥中的值。

>>> keys = ['2', '3', '2-1', '3-1', '4', '2-2', '4-1', '2-3', '2-4', '3-2', '2-5', '3-3', '4-2']
>>> values = [2, 3, 4, 5, 6, 4, 2, 1, 1, 2, 3, 4, 5]
>>> dict(zip(keys, values))
{'2-2': 4, '4-1': 2, '4-2': 5, '2-1': 4, '2-4': 1, '2-3': 1, '2-5': 3, '3-3': 4, '3-2': 2, '3-1': 5, '3': 3, '2': 2, '4': 6}

此外,您可以使用字典的整数键,因此不需要'2',您只需使用2

答案 1 :(得分:3)

dict要求没有重复的键,但在你的键列表中你有很多重复,所以dict将合并它们。如果您想拥有多个密钥,可以使用multidict实现来实现:

>>> a =  ['2', '3', '2', '3', '4', '2', '4', '2', '2', '3', '2', '3', '4']
>>> b =  [2, 3, 4, 5, 6, 4, 2, 1, 1, 2, 3, 4, 5]
>>> dict(zip(a, b))
{'3': 4, '2': 3, '4': 5}
>>> multidict.MultiDict(zip(a, b))
MultiDict([('2', 2), ('3', 3), ('2', 4), ('3', 5), ('4', 6), ('2', 4), ('4', 2),
 ('2', 1), ('2', 1), ('3', 2), ('2', 3), ('3', 4), ('4', 5)])

注意:我使用paste.util.multidict.MultiDict,按pip install paste安装。

答案 2 :(得分:2)

字典是散列,这意味着每个密钥只能存在一次。

>>> a =  ['2', '3', '2', '3', '4', '2', '4', '2', '2', '3', '2', '3', '4']
>>> b =  [2,    3,   4,   5,   6,   4,   2,   1,   1,   2,   3,   4,   5 ]
>>> c = zip(a, b)
>>> c
[('2', 2), ('3', 3), ('2', 4), ('3', 5), ('4', 6), ('2', 4), ('4', 2), ('2', 1), ('2', 1), ('3', 2), ('2', 3), ('3', 4), ('4', 5)]
>>> dict(c)
{'3': 4, '2': 3, '4': 5}