这是我的代码:
listy = [[(100, 1), (90, 2), (90, 2), (80, 3), (70, 4)], [(100, 1), (90, 2), (90, 2), (80, 3), (80, 3)]]
track = [dict(x) for x in listy]
print(track)
我有一个嵌套的元组列表,我把它们转换成一个列表中的字典,但是问题是一些键和值在元组被修改后消失了,输出如下:
[{100: 1, 90: 2, 80: 3, 70: 4}, {100: 1, 90: 2, 80: 3}]
相反,输出应该是这样的:
[{100:1, 90:2, 90:2, 80:3, 70:4},{100:1, 90:2, 90:2, 80:3, 80:3}]
为什么我的代码会给出错误的输出,可能的解决方案是什么?我使用的是Python 3.x
2条答案
按热度按时间tcomlyy61#
Python不允许字典中有重复的键,类似于你的例子:
如果它允许重复的键,它就无法知道是返回
2
还是90
。如果你想跟踪元组的数量,你可以使用
collections.Counter
:其输出为:
[Counter({(90, 2): 2, (100, 1): 1, (80, 3): 1, (70, 4): 1}), Counter({(90, 2): 2, (80, 3): 2, (100, 1): 1})]
或者,如果您只想将键与值关联起来,则可以使用
defaultdict
:它提供以下输出:
[defaultdict(<class 'list'>, {100: [1], 90: [2, 2], 80: [3], 70: [4]}), defaultdict(<class 'list'>, {100: [1], 90: [2, 2], 80: [3, 3]})]
3mpgtkmj2#
值似乎消失了,因为您尝试创建具有重复键的dict:
将导致:
Python字典不支持重复键。
@Mahir您可以将多个值关联到字典中的一个键,如下所示