Słowniki w python powinny mieć unikalne klucze. Dlaczego masz pozwolenie na zrobienie tego ...Dlaczego Python pozwala na tworzenie słowników z duplikatami kluczy
d = {'a' : 'b', 'a' : 'c'}
Czy nie powinien to być jakiś błąd?
Słowniki w python powinny mieć unikalne klucze. Dlaczego masz pozwolenie na zrobienie tego ...Dlaczego Python pozwala na tworzenie słowników z duplikatami kluczy
d = {'a' : 'b', 'a' : 'c'}
Czy nie powinien to być jakiś błąd?
>>> d = {'a' : 'b', 'a' : 'c'}
>>> d
{'a': 'c'}
Nie, to po prostu jesteś inicjowanie dict przy użyciu uprzednio istniejący klucz, który po prostu zbyt zapisuje aktualną wartość dla istniejącego klucza.
>>> 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
Jak widać, dwa sposoby inicjalizacji są w pewnym stopniu podobne: pierwsza para klucz-wartość jest zapisywana jako pierwsza i druga.
Dokładnie o to pytają. Zastanawiają się ** dlaczego to nie jest błąd **. –
Nie. Po prostu nadpisuje klucze.
>>> d = {'a' : 'b', 'a' : 'c'}
>>> d
{'a': 'c'}
Czy zastąpienie klucza jest błędem? Nie powinno. W przeciwnym razie będziesz mieć milion błędów podczas próby zaktualizowania rzeczy w słowniku. Powodem, dlaczego myślę, że to nie jest to błąd (wyjaśniając kod w języku angielskim):
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.
Możesz być zainteresowany w czytaniu [Python na zgłoszenia o dokładnym tej kwestii] (https://bugs.python.org/issue16385). Rozdzielczość: odrzucona. –
dlaczego miałoby to być? klucze są unikalne, wartość jest po prostu nadpisana zgodnie z oczekiwaniami. Nie ma duplikatów kluczy. Jestem pewien, że jest to również duplikat, ale nie mogę teraz znaleźć duplikatu. –
Dobre pytanie - nigdy o tym nie wiedziałem. Interesujące uzasadnienie: Terry wydaje się myśleć, że istnieją przypadki użycia, które uzasadniają takie zachowanie. – GreenAsJade