Python 用元组和列表理解词典赋值

Python 用元组和列表理解词典赋值,python,python-3.x,Python,Python 3.x,我是python初学者,最近学习了字典作业。 以下是我正在尝试的 my_list = [[1, 4], [2, 2],[5,1]] lists = dict(my_list) print(lists) # Prints {1:4,2:2,5:1} my_list = [(1, 4), (2, 2),(5,1)] lists = dict(my_list) print(lists) # Prints {1:4,2:2,5:1} my_list = [[1, 4], (2, 2),{5,

我是python初学者,最近学习了字典作业。 以下是我正在尝试的

my_list = [[1, 4], [2, 2],[5,1]]
lists = dict(my_list)
print(lists)   # Prints {1:4,2:2,5:1}

my_list = [(1, 4), (2, 2),(5,1)]
lists = dict(my_list)
print(lists)   # Prints {1:4,2:2,5:1}

my_list = [[1, 4], (2, 2),{5,1}]
lists = dict(my_list)
print(lists)   # Prints {1:5,2:2}
我无法解释为什么我们会在例3中得到这个奇怪的答案。
请帮助并解释。

{5,1}
是一个
集合
,因此本质上是无序的。这在某种程度上取决于您的Python实现,不可预测地迭代为
1->5
5->1
。如果您抓住了第一个案例,那么您的
dict
实例化相当于:

lists = dict([(1, 4), (2, 2), (1, 5)])
或者,更为冗长和明显

lists = {}
lists[1] = 4
lists[2] = 2
lists[1] = 5  # overrides first binding of 1

由于dict中不能有重复的键,因此重复键的最后一个键绑定“获胜”。

{5,1}
是一个
集合,因此本质上是无序的。这在某种程度上取决于您的Python实现,不可预测地迭代为
1->5
5->1
。如果您抓住了第一个案例,那么您的
dict
实例化相当于:

lists = dict([(1, 4), (2, 2), (1, 5)])
或者,更为冗长和明显

lists = {}
lists[1] = 4
lists[2] = 2
lists[1] = 5  # overrides first binding of 1

由于dict中不可能有重复的密钥,因此重复密钥的最后一个密钥绑定将“获胜”。

这是否意味着,我有可能获得ans-{1:4,2:2,5:1}@avatar17,是的,是的。但是你不应该假设
set
给出了任何特定的顺序。理论上,是的。实际上,常见的CPython实现
set
将以相当一致的顺序生成
int
(尤其是小的正整数)。这是否意味着,我有可能得到ans-{1:4,2:2,5:1}@avatar17,是的,它是这样的。但是你不应该假设
set
给出了任何特定的顺序。理论上,是的。实际上,常见的CPython实现
set
将以相当一致的顺序生成
int
(尤其是小的正整数)。