2010-12-20 7 views
11

Robię słownika:słownik w python z rzędu ustawić na początku

d = {"server":"mpilgrim", "database":"master"} 
d['mynewkey'] = 'mynewvalue' 

Ale gdy wyświetlić go widziałem, że ten dict jest odwrócona.

print(d) 

{'mynewkey': 'mynewvalue', 'database': 'master', 'server': 'mpilgrim'} 

Jak cofnąć to zdjęcie?

A może to prawda, że ​​słownik nie jest sortowalny, co muszę użyć, aby mieć kolekcję, w której liczy się kolejność tych informacji?

Odpowiedz

17

Słownik są nieuporządkowane (kolejność jest deterministyczny, ale zależy od garstki czynników nawet nie myśleć i nie powinien dbać o - hash klucze, kolejność wstawiania, kolizje itp.). W Pythonie 2.7+ użyj collections.OrderedDict. Jeśli musisz użyć starszej wersji, istnieją różne implementacje, które Google może wskazać.

+0

Najprostszym realizacja samopoczucie listę krotek, zwłaszcza jeśli prędkość nie jest problemem. – katrielalex

+0

Tak, to jest najłatwiejsze, ale wykonuje * potwornie *. Zwłaszcza gdy jest używany z algorytmami, które przyjmują "rzeczywisty" (tj. 'O (1)' odczyt/zapis/'in') dyktuje – delnan

1

Twój słownik nie jest odwrócony. Jest on posortowany częściowo według kluczy twojego klucza. Nie możesz zmienić tej kolejności (nie bez użycia niestandardowego słownika). W Pythonie 2.7 lub nowszym można użyć uporządkowanego słownika (collections.OrderedDict).

Wcześniejszej wersji można użyć następującego recipe.

Mają również spojrzeć na to pytanie: What is the best ordered dict implementation in python?

17
from collections import OrderedDict 

d = OrderedDict() 
d["server"] = "mpilgrim" 
d["database"] = "master" 
d['mynewkey'] = 'mynewvalue' 

print(d) 

OrderedDict([('server', 'mpilgrim'), ('database', 'master'), ('mynewkey', 'mynewvalue')]) 
+0

Nie, to nie jest w porządku, ponieważ na początku" serwer ":" mpilgrim "był pierwszy. Teraz jest drugi – user278618

+0

W porządku, poprawiłem wstawienie klucza, gdy tylko zauważyłem. W przypadku 'OrderedDicts' musisz dodać klucze za pomocą operatora [] (' __setitem__'). Zamówienie reklamowe zostało zachowane. – Aphex

Powiązane problemy