2012-02-27 20 views

Odpowiedz

1

To nie jest możliwe. Możesz dostać tylko posortowaną reprezentację dyktatora, tak jak to robisz.


Edit

Podobnie zrobili jakieś badania. Wygląda na to, że Python 2.7 ma coś, co nazywa się OrderedDict, co pozwoli ci to zrobić. Oto więcej informacji na ten temat: http://docs.python.org/library/collections.html?highlight=ordereddict#ordereddict-examples-and-recipes

+0

Ah Widzę, jestem tuż przed tymi czasami: D szkoda Używam 2.5 dla celów hostingowych. Zamierzam zmienić kod, aby zamiast tego zaakceptować listę. – ofko

8

Obiekty standardowe nie są objęte gwarancją ani zamówieniem. Dzieje się tak dlatego, ponieważ zwykle używasz dyktatury, aby uzyskać wartość do zamawiania kluczy, nie ma znaczenia.

Jeśli chcesz zachować porządek, możesz użyć numeru an OrderedDict. To nie jest posortowane, ale pamięta kolejność dodawania do niego elementów. Więc można utworzyć przy użyciu pary kluczy wartości posortowanych:

>>> d = {"a":4, "b":12, "c":2} 
>>> from collections import OrderedDict 
>>> od = OrderedDict(sorted(d.items(), key=lambda(k,v):(v,k))) 
>>> od 
OrderedDict([('c', 2), ('a', 4), ('b', 12)]) 
1

Jak wiele innych podkreślił, nie można jak pyton nie pozwalają zrobić (z wyjątkiem zamówionych dicts). Co można realizować tak czy owak jest coś takiego (python < 2,7)

>>> d = {"a":4, "b":12, "c":2} 
>>> z = [(i,d[i]) for i in d] 
>>> z.sort(key=lambda x: x[1]) 
>>> z 
[('c', 2), ('a', 4), ('b', 12)] 

I jak teraz d jest posortowana można przeprowadzić wyszukiwanie binarne nad nim, aby uzyskać to, co chcesz (lub normalny iteracja jeśli don” zbyt wiele uwagi na temat prędkości).