Почему python позволяет создавать словари с дублирующимися ключами

Словари в python должны иметь уникальные ключи. Почему вам разрешено это делать …

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

Разве это не должно породить какую-то ошибку?

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

Нет, это только вы инициализируете dict, используя уже существующий ключ, который просто переписывает текущее значение существующего ключа.

 >>> 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 

Как вы можете видеть, два способа инициализации несколько похожи: первое ключевое значение сохраняется сначала, а затем второе.

Это не так. Он просто перезаписывает ключи.

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

Ошибка перезаписать ключ? Это не должно. В противном случае у вас будет миллион ошибок при попытке обновления содержимого в словаре. Причина, почему я думаю, что нет ошибки, это (объяснение кода на английском языке):

 d - словарь.
 есть ключ и значение.  ('a' и 'b')
 Соедините их и введите их, сохраняя их.
 Новая запись ('a' и 'c')
 ключ «а» уже существует;  обновить.