Python-select I-TEN element in OrderedDict
Habe ich ein code-snippet, welche Aufträge ein Wörterbuch alphabetisch ein.
Gibt es eine Möglichkeit, wählen Sie die I-Taste in der bestellten Wörterbuch und zurückkehren, um den entsprechenden Wert? also
import collections
initial = dict(a=1, b=2, c=2, d=1, e=3)
ordered_dict = collections.OrderedDict(sorted(initial.items(), key=lambda t: t[0]))
print(ordered_dict)
OrderedDict([('a', 1), ('b', 2), ('c', 2), ('d', 1), ('e', 3)])
Möchte ich eine Funktion entlang der Vene...
select = int(input("Input dictionary index"))
#User inputs 2
#Program looks up the 2nd entry in ordered_dict (c in this case)
#And then returns the value of c (2 in this case)
Wie kann das erreicht werden?
Danke.
(Ähnlich Zugriff auf Elemente In einem ordereddict, aber ich will nur, um die Ausgabe der Wert des Schlüssel-Wert-paar.)
versuchen
Ich habe versucht (ohne dass der Benutzer Eingangs-bit) print(ordered_dict[ordered_dict.keys()[2]]) und erhielt die Fehlermeldung TypeError: "KeysView" Objekt unterstützt keine Indizierung.
Ich bitte um Entschuldigung, korrigiert.
Sie vermeiden das Sortieren der ganzen
ordered_dict[ordered_dict.keys()[index]]
Ich habe versucht (ohne dass der Benutzer Eingangs-bit) print(ordered_dict[ordered_dict.keys()[2]]) und erhielt die Fehlermeldung TypeError: "KeysView" Objekt unterstützt keine Indizierung.
lambda
geschrieben mit b
vor der d
.Ich bitte um Entschuldigung, korrigiert.
Sie vermeiden das Sortieren der ganzen
initial
Wörterbuch, wenn der Eingang ist ein kleiner index mit heapq
: result = initial[heapq.nsmallest(select+1, initial)[-1]]
InformationsquelleAutor Pingk | 2014-03-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Python 2:
Wenn Sie wollen, um den Zugriff auf den Schlüssel:
Wenn Sie wollen, um den Zugriff auf den Wert:
Wenn Sie mit Python 3, können Sie konvertieren die
KeysView
Objekt zurückgegeben von derkeys
Methode, indem er es als eine Liste:Nicht die hübscheste Lösung, aber es funktioniert.
InformationsquelleAutor Daniel Lee
Mit
itertools.islice
effizient ist hier, weil wir nicht die Erstellung einer intermediate-Listen, zum Wohle der subscripting.Wenn Sie wollen einfach nur den Wert, die Sie tun können,
Bitte überprüfen Sie die aktualisierte Antwort jetzt.
+1.
islice
ist vorzuziehen, aber für ein kleines Wörterbuchlist(ordered_dict.values())[2]
könnte schneller sein, d.h., nicht davon ausgehen, was ist schneller, bis Sie gemessen haben, esInteressant, was macht islice bevorzugt für kleine Wörterbücher? Nur die Logik hinter dem code oder etwas anderes?
Er sagt,
islice
ist vorzuziehen, aber nicht für kleine dictsInformationsquelleAutor thefourtheye
Haben Sie verwenden, um eine OrderedDict oder wollen Sie einfach nur einen dict-like-Typ, der unterstützt die Indizierung? Wenn letzteres, dann erwägen, eine sortierte dict-Objekt. Einige Implementierungen von SortedDict (die Anordnung der Paare auf der Grundlage der Schlüssel sort order) unterstützen die schnelle n-th-Indizierung. Zum Beispiel, die sortedcontainers Projekt hat eine SortedDict Typ mit random-access-Indizierung.
In deinem Fall würde es so Aussehen:
Wenn Sie eine Menge von verweisen, diese wird viel schneller als mehrfach Durchlaufen, um das gewünschte index.
Ja, es werden automatisch bleiben, sortiert nach den keys. Es werden viel schneller als die akzeptierte Lösung, wenn Sie Ihre änderungen an dem Wörterbuch und dann indizieren.
Genial, ich werde wahrscheinlich verwenden Sie diese beim nächsten mal dann. Ich glaube nicht, ich werde ändern Sie die akzeptierte Antwort, aber ich werde Stimmen Sie bis.
InformationsquelleAutor GrantJ
Nicht unterschätzen, nur eine schlichte 'ole für Schleife:
Der Vorteil hier ist, dass die Schleife unterbrochen wird, sobald das gewünschte element gefunden wird, und gibt ein vernünftiges Ergebnis, wenn nicht gefunden...
Der Nachteil ist, dass die relative Scheiben werden nicht unterstützt.
InformationsquelleAutor dawg