我是python的初学者,我想创建一个简单的程序,使用压缩函数将list1中的每个元素分配给list2中的相应元素。
list1=[1,2,3,4,1]
list2=[2,3,4,5,6]
dictionary=dict(zip(list1,list2))
print(dictionary)
但是,因为我在list1中有一个重复值,所以字典显示以下结果:
{1: 6, 2: 3, 3: 4, 4: 5}
由于1在list1中是重复的值,因此仅显示1:6,而不显示1:2。我如何更改我的代码,以使重复的值被考虑在内,并以其各自的顺序显示?
{1: 2, 2: 3, 3: 4, 4: 5, 1: 6}
谢谢
发布于 2018-08-03 04:24:15
使用Python是不可能的,因为这违背了dict
的定义--key必须是唯一的。评论解释了为什么会这样。
然而,还有许多其他方法可能对你有用,可以达到几乎相同的效果。一种简单但不是特别有用的方法是:
almost_dictionary = list(zip(list1, list2))
这给出了结果
[(1, 2), (2, 3), (3, 4), (4, 5), (1, 6)]
它有时可以像字典一样使用。然而,这可能不是您想要的。更好的方法是使用一个dict
或defaultdict
,它为每个键保存一个与该键相关的所有值的list
。defaultdict
更容易使用,但更难设置:
dictionary = defaultdict(list)
for k, v in zip(list1, list2):
dictionary[k].append(v)
print(dictionary)
这给出了结果
defaultdict(<class 'list'>, {1: [2, 6], 2: [3], 3: [4], 4: [5]})
您可以看到,每个键都有每个值--这些值都在列表中。dictionary[1]
的值为[2, 6]
,因此您可以同时使用这两个值。
选择哪种方法取决于您使用字典的目的。
https://stackoverflow.com/questions/51661375
复制相似问题