为什么python允许您创建具有重复键的字典

时间:2015-05-17 02:19:07

标签: python

python中的字典应该具有唯一键。你为什么允许这样做......

d = {'a' : 'b', 'a' : 'c'}

这不应该引起某种错误吗?

2 个答案:

答案 0 :(得分:6)

>>> d = {'a' : 'b', 'a' : 'c'}
>>> d
{'a': 'c'}

不,只是你使用预先存在的密钥初始化一个字典,它只是覆盖了现有密钥的当前值。

>>> dis.dis("d = {'a' : 'b', 'a' : 'c'}")
  1           0 BUILD_MAP                2
              3 LOAD_CONST               0 ('b')
              6 LOAD_CONST               1 ('a')
              9 STORE_MAP
             10 LOAD_CONST               2 ('c')
             13 LOAD_CONST               1 ('a')
             16 STORE_MAP
             17 STORE_NAME               0 (d)
             20 LOAD_CONST               3 (None)
             23 RETURN_VALUE

>>> dis.dis("d={};d['a']='b';d['a']='c'")
  1           0 BUILD_MAP                0
              3 STORE_NAME               0 (d)
              6 LOAD_CONST               0 ('b')
              9 LOAD_NAME                0 (d)
             12 LOAD_CONST               1 ('a')
             15 STORE_SUBSCR
             16 LOAD_CONST               2 ('c')
             19 LOAD_NAME                0 (d)
             22 LOAD_CONST               1 ('a')
             25 STORE_SUBSCR
             26 LOAD_CONST               3 (None)
             29 RETURN_VALUE

正如您所看到的,两种初始化方式有些相似:第一个键值先存储然后存储第二个。

答案 1 :(得分:0)

没有。它只是覆盖了键。

>>> d = {'a' : 'b', 'a' : 'c'}
>>> d
{'a': 'c'}

覆盖密钥是错误的吗?它不应该。否则,当您尝试更新字典中的内容时,您将遇到一百万个错误。为什么我认为没有错误的原因是这个(用英语解释代码):

d is a dictionary.
there is a key and a value. ('a' and 'b')
Pair them up and enter them, while saving them.
New entry ('a' and 'c')
key 'a' already exists; update value.