Python中定义字典后打印输出与定义内容不一致是什么原因?
问题原因
- Python 字典的键必须唯一,判定两个键是否重复的规则是:二者哈希值相等,且
==比较结果为True。 - 布尔类型是int的子类,
True本质上对应整数值1,hash(True)和hash(1)结果相同,且1 == True返回True,因此字典会将1和True识别为同一个键。 - 你定义字典时,先给键1赋值为
"apple",后续又给同一个键(True)赋值为False,后面的赋值会直接覆盖前面的值,因此最终键1对应的值为False,"apple"被覆盖消失。
解决方法
- 若确实需要同时保留数值1和布尔值True作为独立键,可将键转为字符串类型做区分:
pairs = {"1": "apple", "orange": [2, 3, 4], True: False, None: "True"}
此时打印结果为{'1': 'apple', 'orange': [2, 3, 4], True: False, None: 'True'},符合预期。
- 若业务场景不需要区分数值1和布尔值作为键,提前统一键的类型,避免出现等价的不同类型键即可。
内容的提问来源于stack exchange,提问作者Mohamed Amine
相关产品推荐
相关产品推荐

