python中的字典应该具有唯一键。你为什么允许这样做......
d = {'a' : 'b', 'a' : 'c'}
这不应该引起某种错误吗?
答案 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.