You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:27:15