it-swarm.com.de

Wie bekomme ich den Index mit dem Schlüssel im Python-Wörterbuch?

Ich habe den Schlüssel eines Python-Wörterbuchs und möchte den entsprechenden Index im Wörterbuch abrufen. Angenommen, ich habe das folgende Wörterbuch,

d = { 'a': 10, 'b': 20, 'c': 30}

Gibt es eine Kombination von Python-Funktionen, damit ich den Indexwert 1 mit dem Schlüsselwert 'b' erhalten kann?

d.??('b') 

Ich weiß, dass es mit einer Schleife oder mit Lambda (mit einer eingebetteten Schleife) erreicht werden kann. Nur gedacht, es sollte einen direkteren Weg geben.

15
chapter3

Verwenden Sie OrderedDicts: http://docs.python.org/2/library/collections.html#collections.OrderedDict

>>> x = OrderedDict((("a", "1"), ("c", '3'), ("b", "2")))
>>> x["d"] = 4
>>> x.keys().index("d")
3
>>> x.keys().index("c")
1

Für diejenigen, die Python 3 verwenden

>>> list(x.keys()).index("c")
1
37
Kiwisauce

Wörterbücher in Python haben keine Reihenfolge. Sie können stattdessen eine Liste von Tupeln als Datenstruktur verwenden.

d = { 'a': 10, 'b': 20, 'c': 30}
newd = [('a',10), ('b',20), ('c',30)]

Dann könnte dieser Code verwendet werden, um die Positionen der Schlüssel mit einem bestimmten Wert zu ermitteln

locations = [i for i, t in enumerate(newd) if t[0]=='b']

>>> [1]
0
Matt Alcock

Nein, es gibt keinen einfachen Weg, da Python-Wörterbücher keine festgelegte Reihenfolge haben.

Aus der Dokumentation :

Schlüssel und Werte werden in einer beliebigen Reihenfolge aufgeführt, die nicht zufällig ist, je nach Python-Implementierung unterschiedlich ist und von der Geschichte des Einfügens und Löschens im Wörterbuch abhängt.

Mit anderen Worten, der "Index" von b hängt vollständig davon ab, was zuvor in das Mapping eingefügt und aus diesem gelöscht wurde:

>>> map={}
>>> map['b']=1
>>> map
{'b': 1}
>>> map['a']=1
>>> map
{'a': 1, 'b': 1}
>>> map['c']=1
>>> map
{'a': 1, 'c': 1, 'b': 1}

Ab Python 2.7 können Sie stattdessen den Typ collections.OrderedDict() verwenden, wenn die Reihenfolge der Einfügung für Ihre Anwendung wichtig ist.

0
Martijn Pieters