>>> D = {'a': 1, 'b': 2, 'c': 3}
>>> D
{'a': 1, 'c': 3, 'b': 2}
Po prostu zrobiłem to w powłoce Python i zastanawiam się, dlaczego klucz "c" byłby po kluczu "b" ???W jakiej kolejności python wyświetla klucze słownika?
>>> D = {'a': 1, 'b': 2, 'c': 3}
>>> D
{'a': 1, 'c': 3, 'b': 2}
Po prostu zrobiłem to w powłoce Python i zastanawiam się, dlaczego klucz "c" byłby po kluczu "b" ???W jakiej kolejności python wyświetla klucze słownika?
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']
.
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).
Dziękuję i wiedziałem, że słownik jest nieuporządkowany. Python po prostu mi zmylił, ponieważ zmienił kolejność wyświetlania. – QQending
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ć. –
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. –
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)]
Nie do końca prawda: odpowiedź Lennarta jest technicznie bardziej poprawna "Kolejność jest arbitralna (ale nie losowa)". –
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
W Pythonie 2.7 można użyć Ordered Dict.
Zobacz, jeśli chcesz się dowiedzieć, jak działają słowniki: http://us.pycon.org/2010/conference/schedule/event/12/ – DisplacedAussie
Nie mogę uzyskać dostępu do powyższego linku – SKT
Myślę, że to prawdopodobnie ta rozmowa: https://www.youtube.com/watch?v=C4Kc8xzcA68 –