it-swarm.com.de

Schlüsselreihenfolge in Python-Wörterbüchern

Code:

d = {'a': 0, 'b': 1, 'c': 2}
l = d.keys()

print l

Dies druckt ['a', 'c', 'b']. Ich bin nicht sicher, wie die Methode keys die Reihenfolge der Schlüsselwörter in l bestimmt. Ich möchte jedoch die Schlüsselwörter in der "richtigen" Reihenfolge abrufen können. Die richtige Reihenfolge würde natürlich die Liste ['a', 'b', 'c'] erstellen.

67
rectangletangle

Sie könnten OrderedDict (erfordert Python 2.7) oder höher verwenden.

Beachten Sie auch, dass OrderedDict({'a': 1, 'b':2, 'c':3}) nicht funktioniert, da die mit {...} erstellte dict die Reihenfolge der Elemente bereits vergessen hat. Stattdessen möchten Sie OrderedDict([('a', 1), ('b', 2), ('c', 3)]) verwenden.

Wie in der Dokumentation erwähnt, können Sie für Versionen unter Python 2.7 this recipe verwenden.

65
Abhinav Gupta

Python 3.7+

In Python 3.7.0 wurde die Erhaltung der Einfügungsreihenfolge von dict objects erklärt als offizieller Teil der Python-Sprachspezifikation. Darauf können Sie sich verlassen.

Python 3.6 (CPython)

Ab Python 3.6 werden bei der CPython-Implementierung von Python Wörterbücher Einfügungsreihenfolge beibehalten standardmäßig beibehalten. Dies wird jedoch als Implementierungsdetail betrachtet. Sie sollten weiterhin collections.OrderedDict verwenden, wenn Sie die Reihenfolge der Einfügungen für andere Implementierungen von Python gewährleisten möchten.

Python> = 2,7 und <3,6

Verwenden Sie die collections.OrderedDict -Klasse, wenn Sie eine dict benötigen, die die Reihenfolge der eingefügten Elemente merkt.

42
Eugene Yarmash
>>> print sorted(d.keys())
['a', 'b', 'c']

Verwenden Sie die sortierte Funktion , die die übergebenen Iterationen sortiert.

Die .keys()-Methode gibt die Schlüssel in beliebiger Reihenfolge zurück.

40
Mike Lewis

Sortieren Sie einfach die Liste, wenn Sie sie verwenden möchten.

l = sorted(d.keys())
10
Drew

Von http://docs.python.org/tutorial/datastructures.html :

"Die keys () -Methode eines Dictionary-Objekts gibt eine Liste aller im Dictionary verwendeten Schlüssel in beliebiger Reihenfolge zurück (wenn Sie möchten, dass sie sortiert wird, wenden Sie einfach die sortierte () - Funktion an)."

10
shelman

Obwohl die Reihenfolge keine Rolle spielt, ist das Wörterbuch Hashmap. Es hängt von der Reihenfolge ab, wie es eingeschoben wird:

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()))

ausgabe:
für string abbc sind die Schlüssel dict_keys (['a', 'b', 'c'])
Für String cbab sind die Schlüssel dict_keys (['c', 'b', 'a'])

0
zehai