Python字典重复键是否会互相覆盖?为何重复键取值返回'b'?
Python字典重复键的覆盖规则说明
问题复现代码
>>> dic={1:"a",1:"b",3:"c"} >>> dic[min(dic.keys())] 'b'
结果原因解释
- Python原生字典的核心约束是键全局唯一,同一个键不允许同时绑定多个值,重复定义同键的键值对时会直接产生覆盖效果,最终生效的永远是最后一次赋值的绑定关系。
- 上述代码的字典初始化过程是按书写顺序逐对解析执行的:
- 解析第一组
1:"a":字典内不存在键1,新增映射关系1 → "a" - 解析第二组
1:"b":字典内已存在键1,直接覆盖该键原有绑定值,映射更新为1 → "b",之前绑定的"a"会被直接丢弃,不会在字典结构中留存 - 解析第三组
3:"c":字典内不存在键3,新增映射关系3 → "c"
- 解析第一组
- 初始化完成后,字典实际存储的内容只有
{1: 'b', 3: 'c'},此时调用min(dic.keys())取到的最小键就是1,访问dic[1]返回'b'是完全符合字典设计规则的结果。
你可以直接打印初始化后的字典,验证实际存储的内容:
>>> print(dic) {1: 'b', 3: 'c'}
如果你需要为同一个逻辑键存储多个关联值,可以手动将值设置为列表、集合等可变容器类型,主动收纳多份内容,不要使用重复写同键的写法,后者只会触发值覆盖。
内容的提问来源于stack exchange,提问作者ishwar kokkili
相关产品推荐
相关产品推荐

