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

Python中dict.fromkeys方法返回结果顺序不符预期的疑问

为什么dict.fromkeys()用集合生成的字典顺序和预期不一样?

嘿,这个问题其实戳中了Python里一个很容易踩坑的知识点——集合(set)是完全无序的!

先拆解一下你遇到的问题:

  1. 你定义的keys = {'a', 'e', 'i', 'o', 'u'}是一个集合,而集合在Python中的核心特性就是不保存元素的插入顺序。它底层是哈希表实现的,元素的存储位置由自身的哈希值决定,和你写代码时的顺序没有任何关系。
  2. dict.fromkeys()方法的逻辑是遍历传入的可迭代对象(这里就是你的集合),把每个元素作为键,用指定的默认值(你没传的话就是None)作为对应的值来构建字典。但因为集合本身是无序的,遍历它时拿到的元素顺序自然不是你最初写的顺序,所以生成的字典键的顺序就和预期不一样了。

你之前以为集合会像链表一样按顺序分配内存,这其实是对集合数据结构的误解。集合的设计目标是快速查找、去重,而不是维护顺序,所以它根本不会记录你插入元素的先后顺序。

怎么得到你预期的有序字典?

很简单,把集合换成有序的可迭代对象,比如列表(list)就可以了:

keys = ['a', 'e', 'i', 'o', 'u']  # 用列表替代集合
vowels = dict.fromkeys(keys)
print(vowels)  # 输出:{'a': None, 'e': None, 'i': None, 'o': None, 'u': None}

补充个小知识点:Python 3.7及以后的版本,字典是会维护键的插入顺序的,但这个前提是你传入的可迭代对象本身是有序的(比如列表、元组)。如果传入的是无序的集合,那字典的顺序还是由集合的遍历顺序(哈希表顺序)决定。

内容的提问来源于stack exchange,提问作者NutsAndBolts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:02:34