Ich habe unten ein Wörterbuch:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Wie indiziere ich den ersten Eintrag im Wörterbuch?
colors[0]
wird KeyError
aus offensichtlichen Gründen ein zurückgeben.
python
dictionary
indexing
Harpal
quelle
quelle
Antworten:
Wörterbücher sind in Python-Versionen bis einschließlich Python 3.6 ungeordnet. Wenn Sie sich nicht um die Reihenfolge der Einträge kümmern und trotzdem über den Index auf die Schlüssel oder Werte zugreifen möchten, können Sie
d.keys()[i]
undd.values()[i]
oder verwendend.items()[i]
. (Beachten Sie, dass diese Methoden eine Liste aller Schlüssel, Werte oder Elemente in Python 2.x erstellen. Wenn Sie sie also mehrmals benötigen, speichern Sie die Liste in einer Variablen, um die Leistung zu verbessern.)Wenn Sie sich für die Reihenfolge der Einträge interessieren, können Sie ab Python 2.7 verwenden
collections.OrderedDict
. Oder verwenden Sie eine Liste von PaarenWenn Sie keinen Zugriff per Schlüssel benötigen. (Warum sind deine Zahlen übrigens Zeichenfolgen?)
In Python 3.7 sind normale Wörterbücher geordnet, sodass Sie sie nicht
OrderedDict
mehr verwenden müssen (aber Sie können es trotzdem - es ist im Grunde der gleiche Typ). Die CPython-Implementierung von Python 3.6 enthielt diese Änderung bereits. Da sie jedoch nicht Teil der Sprachspezifikation ist, können Sie sich in Python 3.6 nicht darauf verlassen.quelle
d.iterkeys().next()
anstelle vond.keys()[0]
, um einen der Schlüssel zu überprüfen, ohne ihn zu entfernen. Wenn das Wörterbuch sehr groß ist, wird es einen großen Unterschied in Bezug auf die Leistung machen. Gleiches gilt für Werte und Gegenstände. In Python 2.7 können Sie auchWenn sich noch jemand mit dieser Frage befasst, ist die derzeit akzeptierte Antwort veraltet:
Seit Python 3.7 * behalten die Wörterbücher die Reihenfolge bei , das heißt, sie verhalten sich jetzt genau so, wie sie es
collections.OrderedDict
gewohnt sind. Leider gibt es immer noch keine dedizierte Methode zum Indizieren inkeys()
/values()
des Wörterbuchs, sodass das Abrufen des ersten Schlüssels / Werts im Wörterbuch wie folgt erfolgen kannoder alternativ (dies vermeidet das Instanziieren der Schlüsselansicht in einer Liste):
Wenn Sie einen
n
-ten Schlüssel benötigen , dann ähnlich(* CPython 3.6 enthielt bereits geordnete Diktate, dies war jedoch nur ein Implementierungsdetail. Die Sprachspezifikation enthält geordnete Diktate ab 3.7.)
quelle
Ein Element des Wörterbuchs anzusprechen ist wie auf einem Esel zu sitzen und die Fahrt zu genießen.
In der Regel ist Python DICTIONARY ordentlich
Wenn da ist
Nehmen wir nun an, wenn ich so gehe
dic[10] = "b"
, wird es nicht immer so hinzugefügtEs kann sein wie
Oder
Oder
Oder eine solche Kombination.
So Faustregel ist DICTIONARY ist orderless !
quelle
Wenn Sie ein geordnetes Wörterbuch benötigen, können Sie odict verwenden .
quelle
Eigentlich habe ich eine neuartige Lösung gefunden, die mir wirklich geholfen hat. Wenn Sie sich besonders mit dem Index eines bestimmten Werts in einer Liste oder einem Datensatz befassen, können Sie einfach den Wert des Wörterbuchs auf diesen Index setzen!:
Schau nur:
Jetzt können Sie mithilfe von Hashmaps den Index Ihrer Einträge in konstanter Zeit abrufen (auch bekannt als viel schneller).
quelle
Oh, das ist eine schwierige Frage. Was Sie hier haben, sind im Grunde zwei Werte für jeden Artikel. Dann versuchen Sie, sie mit einer Nummer als Schlüssel anzurufen. Leider ist einer Ihrer Werte bereits als Schlüssel festgelegt!
Versuche dies:
Jetzt können Sie die Schlüssel nach Nummer anrufen, als wären sie wie eine Liste indiziert. Sie können die Farbe und Nummer auch anhand ihrer Position in der Liste referenzieren.
Beispielsweise,
Natürlich müssen Sie eine andere Methode finden, um zu verfolgen, an welcher Stelle sich jede Farbe befindet. Vielleicht können Sie ein anderes Wörterbuch haben, in dem der Schlüssel jeder Farbe als Wert gespeichert wird.
Anschließend können Sie bei Bedarf auch die Farbtaste nachschlagen.
colours [colours_key ['blue']] [0] gibt 'blue' zurück
Sowas in der Art.
Und dann können Sie, während Sie gerade dabei sind, ein Diktat mit den Zahlenwerten als Schlüssel erstellen, sodass Sie sie immer verwenden können, um Ihre Farben nachzuschlagen, wissen Sie, wenn Sie sie brauchen.
Dann gibt (Farben [Farben_Taste [Werte [5] [1]] [0]) 'Blau' zurück.
Oder Sie könnten eine Liste von Listen verwenden.
Viel Glück!
quelle
Sie können nicht, da
dict
ist ungeordnet. Sie können verwenden.popitem()
, um ein beliebiges Element zu erhalten, aber das wird es aus dem Diktat entfernen.quelle
next(iter(d.items()))
(.iteritems()
in Python 2) gibt Ihnen auch ein beliebiges Element (dasselbe in meinen Tests, was sinnvoll ist, da Popitem damit implementiert werden kann), entfernt das Element jedoch nicht.