2010-12-16 17 views

Odpowiedz

17

Porządek ma związek z tym, jak działają wewnętrznie i jaka jest ich kolejność w hali. To z kolei zależy od wartości mieszania kluczy, kolejności, w jakiej zostały wstawione, i od tego, jakiej wersji Pythona używasz.

Kolejność jest dowolna (ale nie losowa) i nigdy nie będzie użyteczna informacja, która kolejność będzie.

Aby uzyskać posortowaną listę kluczy, po prostu użyj sorted(D), która w Twoim przypadku zwróci ['a', 'b', 'c'].

+1

Zobacz, jeśli chcesz się dowiedzieć, jak działają słowniki: http://us.pycon.org/2010/conference/schedule/event/12/ – DisplacedAussie

+0

Nie mogę uzyskać dostępu do powyższego linku – SKT

+0

Myślę, że to prawdopodobnie ta rozmowa: https://www.youtube.com/watch?v=C4Kc8xzcA68 –

5

Od the documentation:

Najlepiej jest myśleć o słowniku jako nieuporządkowana zestaw klucz: par wartości, z wymogiem, że klucze są unikalne (w ciągu jednego słownika).

+0

Dziękuję i wiedziałem, że słownik jest nieuporządkowany. Python po prostu mi zmylił, ponieważ zmienił kolejność wyświetlania. – QQending

+2

Wyjaśniono, że zamówienie może się zmienić w dowolnym momencie. To tak, że wdrożenie może być szybsze. Jeśli potrzebujesz kluczy w określonej kolejności, możesz je posortować. –

+2

QQending: nieuporządkowane oznacza (między innymi) kolejność, którą możesz wydać, może nie być kolejnością, którą wprowadzasz, więc dlaczego zachowanie pythonów jest mylące? Jeśli zastanawiasz się, dlaczego zrobił coś innego niż "posortowane", dyktuje tabele mieszania, a nie drzewa wyszukiwania. Zamawianie będzie prawdopodobnie oparte na haśle klucza, modyfikując bieżący rozmiar tabeli lub coś równie nieprzewidywalnego. –

2

W dowolnej kolejności to się podoba. Taka jest natura słownika. Jeśli chcesz je w określonej kolejności, co musisz zrobić to samemu:

>>> d = {'pax': 1, 'george': 2, 'guido' : 3} 

>>> d 
{'pax': 1, 'george': 2, 'guido': 3} 

>>> [(key,d[key]) for key in sorted(d)] 
[('george', 2), ('guido', 3), ('pax', 1)] 
+0

Nie do końca prawda: odpowiedź Lennarta jest technicznie bardziej poprawna "Kolejność jest arbitralna (ale nie losowa)". –

+1

Nigdzie nie wspomniałem "losowo", tylko że słownik nie określa kolejności. Może on zwrócić je w dowolnej kolejności, którą uzna za stosowną. Fakt, że może on powrócić w deterministycznym porządku na podstawie zawartości i historii operacji, w żaden sposób nie eliminuje odpowiedzialności za samodzielne sortowanie, jeśli tego chcesz: "Metoda keys() obiektu słownikowego zwraca listę wszystkich klucze używane w słowniku, w dowolnej kolejności (jeśli chcesz je posortować, po prostu zastosuj do niego funkcję posortowaną()) ". – paxdiablo

Powiązane problemy