Kod:
d = {'a': 0, 'b': 1, 'c': 2}
l = d.keys()
print l
To drukuje ['a', 'c', 'b']
. Nie jestem pewien, jak metoda keys()
określa kolejność słów kluczowych w l . Chciałbym jednak móc pobrać słowa kluczowe we „właściwej” kolejności. Lista stworzyłaby oczywiście właściwa kolejność ['a', 'b', 'c']
.
python
dictionary
prostokąt
źródło
źródło
Odpowiedzi:
Możesz użyć OrderedDict (wymaga Pythona 2.7) lub nowszego.
Zauważ też, że
OrderedDict({'a': 1, 'b':2, 'c':3})
to nie zadziała, ponieważdict
utworzony w programie{...}
już zapomniałeś o kolejności elementów. Zamiast tego chcesz użyćOrderedDict([('a', 1), ('b', 2), ('c', 3)])
.Jak wspomniano w dokumentacji, w przypadku wersji niższych niż Python 2.7 można użyć tego przepisu.
źródło
Python 3.7+
W Pythonie 3.7.0 natura zachowania kolejności wstawiania
dict
obiektów została zadeklarowana jako oficjalna część specyfikacji języka Python. Dlatego możesz na tym polegać.Python 3.6 (CPython)
Począwszy od Pythona 3.6, w przypadku implementacji języka Python w języku CPython słowniki domyślnie utrzymują kolejność wstawiania . Jest to jednak uważane za szczegół implementacji; powinieneś nadal używać,
collections.OrderedDict
jeśli chcesz, aby kolejność wstawiania była gwarantowana w innych implementacjach Pythona.Python> = 2.7 i <3.6
Użyj
collections.OrderedDict
klasy, gdy potrzebujesz elementu,dict
który pamięta kolejność wstawianych elementów.źródło
>>> print sorted(d.keys()) ['a', 'b', 'c']
Użyj posortowanej funkcji , która sortuje przekazaną iterację.
.keys()
Metoda zwraca klucze w dowolnej kolejności.źródło
Z http://docs.python.org/tutorial/datastructures.html :
„Metoda keys () obiektu słownika zwraca listę wszystkich kluczy używanych w słowniku w dowolnej kolejności (jeśli chcesz, aby były posortowane, po prostu zastosuj do tego funkcję sort ())”.
źródło
Po prostu posortuj listę, kiedy chcesz jej użyć.
źródło
Chociaż kolejność nie ma znaczenia, ponieważ słownik jest hashmap. Zależy to od kolejności wpychania:
s = 'abbc' a = 'cbab' def load_dict(s): dict_tmp = {} for ch in s: if ch in dict_tmp.keys(): dict_tmp[ch]+=1 else: dict_tmp[ch] = 1 return dict_tmp dict_a = load_dict(a) dict_s = load_dict(s) print('for string %s, the keys are %s'%(s, dict_s.keys())) print('for string %s, the keys are %s'%(a, dict_a.keys()))
wyjście:
dla string abbc, klucze to dict_keys (['a', 'b', 'c'])
dla string cbab, klucze to dict_keys (['c', 'b', 'a'])
źródło