Python字典推导生成对象的元素顺序为何随机?
问题:为什么推导式生成的对象输出顺序看似随机?
我了解到Python的dict是按插入顺序排列的,但运行以下示例代码时,通过推导式生成的对象每次运行输出的顺序都看似随机:
DICT = {"1D Hist": 1, "1D Plot": 2} print(DICT) dict = {entry for entry in DICT} print(dict)
运行结果如下:
C:\Code>python bug.py {'1D Hist': 1, '1D Plot': 2} {'1D Plot', '1D Hist'} C:\Code>python bug.py {'1D Hist': 1, '1D Plot': 2} {'1D Hist', '1D Plot'}
我使用的是Python 3.11.4,请问这是为什么?是否是预期行为?
解答
这是预期行为,核心原因是你写的推导式生成的不是字典,而是集合(set):
- 第一行的
DICT是标准字典,Python 3.7及以上版本的字典确实会严格保留插入顺序,所以每次打印的结果顺序一致。 - 第二行的
{entry for entry in DICT}是集合推导式,语法上用大括号但没有键值对结构,生成的是set类型对象。集合的设计目标是快速查找元素,内部不维护固定顺序,每次运行时元素的哈希分布可能导致输出顺序变化,这是集合的固有特性。
如果想通过推导式生成和原字典顺序一致的字典,应该使用字典推导式,写法如下:
new_dict = {key: DICT[key] for key in DICT} print(new_dict)
这样生成的新字典会完全保留原字典的插入顺序,每次运行输出都一致。
内容的提问来源于stack exchange,提问作者bers
相关产品推荐
相关产品推荐

