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

Python中不同插入顺序的dict.keys()比较为何返回True?

为什么插入顺序不同的字典,直接比较dict.keys()会返回True

核心原因是dict.keys()返回的不是列表这类序列对象,而是字典键视图对象(dict_keys),它的相等判断规则和集合一致:仅校验两个视图包含的键是否完全重合,完全不考虑键的插入顺序。

测试代码结果说明

你运行的测试代码结果完全符合这个设计逻辑:

d1 = {1:2, 2:3, 3:4}
d2 = {3:5, 2:6, 1:7}

print(d1.keys() == d2.keys()) # True,两个字典的键都是{1,2,3},集合完全匹配
print(list(d1.keys()) == list(d2.keys())) # False,转成列表后会保留插入顺序,d1键顺序为[1,2,3]、d2为[3,2,1],顺序不一致

旧版本Python的行为一致性

这个判断结果和字典是否保留插入顺序没有关联,在Python 3.0到3.5这些字典默认不保留插入顺序的版本中,dict.keys()的相等判断逻辑完全一致:只要两个字典的键集合完全相同,比较结果就为True。

本质上dict_keys视图从Python3推出之初,就没有把顺序作为相等判断的依据,这个行为和字典本身的相等逻辑是统一的:字典本身做相等比较时,也仅校验所有键值对是否匹配,不会校验插入顺序。你可以把d1.keys() == d2.keys()的判断逻辑近似理解为set(d1.keys()) == set(d2.keys()),这类集合判断本身就和元素顺序无关。

只有当你把键视图显式转换为列表、元组这类有序序列类型时,元素顺序才会参与相等比较。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:21:42