2017-11-03 21 views
6

Proste pytanie:Przypisywanie literałów ze słownika Pythona: czy semantyka jest gwarantowana?

Python 2.6.6 (r266:84292, Aug 9 2016, 06:11:56) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> d = {'foo':1,'foo':2} 
>>> print d 
{'foo': 2} 
>>> d = {'foo':2,'foo':1} 
>>> print d 
{'foo': 1} 

Wygląda więc na to, że jeśli przypisać słownika dosłowne z duplikatu klucza do zmiennej jest drugi klucz/para, która służy, przynajmniej dla tej konkretnej wersji Pythona.

Czy to zachowanie jest gwarantowane?

+1

powielone: ​​https://stackoverflow.com/questions/39678672/is-a-python-dict-comprehension-always-last-wins-if-there-are-duplicate-keys – lqez

Odpowiedz

8

Z Dictionary displays documentation:

Jeżeli sekwencja przecinek oddzielone kluczowych/par bazowych jest podana wyceniane są od lewej do prawej definiowania pozycji słownika: każdy obiekt klucza jest stosowany jako klucz do słownika, aby zapisać odpowiedni punkt odniesienia. Oznacza to, że możesz podać ten sam klucz wiele razy na liście klucz/dane, a ostateczna wartość słownika dla tego klucza będzie ostatnią podaną.

(Pogrubione podkreślenie moje).

Tak, to jest gwarantowane. Wszystkie implementacje Pythona muszą się do tego stosować, odchylenie od powyższej specyfikacji byłoby błędem.

Starsze wersje dokumentacji Pythona nie zawsze zawierały to ostatnie zdanie, ale kolejność oceny zawsze była jednoznaczna.

+0

Tekst dla Python 2.6 (który używane przez OP) jest nieco inny: https://docs.python.org/2.6/reference/expressions.html#dictionary-displays –

+0

@StefanPochmann: zachowanie w 2 nie jest różne, chociaż wystąpił błąd, w którym wartość wyrażenie zostało ocenione przed wyrażeniem kluczowym. –

+0

@StefanPochmann: [Czy literka literowa Pythona zostanie oceniona w kolejności, w jakiej została napisana?] (// stackoverflow.com/q/28156687) –

Powiązane problemy