Wenn a mydict
nicht leer ist, greife ich auf ein beliebiges Element zu:
mydict[mydict.keys()[0]]
Gibt es einen besseren Weg, dies zu tun?
python
dictionary
Stan
quelle
quelle
list(mydict.keys())[0]
.Antworten:
Unter Python 3 zerstörungsfrei und iterativ:
Unter Python 2 zerstörungsfrei und iterativ:
Wenn Sie möchten, dass es sowohl in Python 2 als auch in Python 3 funktioniert, können Sie das
six
Paket verwenden:obwohl es zu diesem Zeitpunkt ziemlich kryptisch ist und ich lieber Ihren Code bevorzugen würde.
Wenn Sie ein Element entfernen möchten, gehen Sie wie folgt vor:
Beachten Sie, dass "first" hier möglicherweise kein geeigneter Begriff ist, da
dict
es sich bei Python <3.6 nicht um einen geordneten Typ handelt. Python 3.6+dicts
sind bestellt.quelle
dict.iterkeys().next()
?dict.values().__iter__().__next__()
:)key, value = dict(d).popitem()
Wenn Sie nur auf ein Element zugreifen müssen (zufällig das erste, da Diktate keine Bestellung garantieren), können Sie dies einfach in Python 2 tun :
Bitte beachten Sie, dass Python (meines Wissens nach) nicht garantiert, dass 2 aufeinanderfolgende Aufrufe einer dieser Methoden eine Liste mit derselben Reihenfolge zurückgeben. Dies wird mit Python3 nicht unterstützt.
in Python 3 :
quelle
list(my_dict.keys())[0]
list(my_dict.keys())[0]
ist nicht faul?In Python3 ist der Weg:
Geben Sie einen Wert vom Typ "dict_keys ()" zurück. Wir erhalten eine Fehlermeldung, wenn Sie das erste Mitglied der Schlüssel von dict auf folgende Weise erhalten:
Schließlich konvertiere ich dict.keys () in list @ 1st und erhalte das erste Mitglied per Listenspleißmethode:
quelle
list(dict.values())[0]
.einen Schlüssel bekommen
einen Wert bekommen
um beides zu bekommen
Die ersten beiden sind Python 2 und 3. Die letzten beiden sind in Python 3 faul, aber nicht in Python 2.
quelle
Wie bereits erwähnt, gibt es kein "erstes Element", da Wörterbücher keine garantierte Reihenfolge haben (sie sind als Hash-Tabellen implementiert). Wenn Sie beispielsweise den Wert wünschen, der dem kleinsten Schlüssel entspricht,
thedict[min(thedict)]
wird dies ausgeführt. Wenn Sie sich für die Reihenfolge interessieren, in der die Schlüssel eingefügt wurden, dh mit "zuerst" "frühestens eingefügt" meinen, können Sie in Python 3.1 Sammlungen verwenden.OrderedDict , das auch im kommenden Python 2.7 enthalten ist; Laden Sie für ältere Versionen von Python den bestellten dict backport (2.4 und höher) herunter, installieren Sie ihn und verwenden Sie ihn, den Sie hier finden .Python 3.7 Jetzt werden Diktate nach Einfügung geordnet.
quelle
Wie wäre es damit. Hier noch nicht erwähnt.
py 2 & 3
quelle
dict.values()
gibt eine Ansicht zurück, sollte also O (1) sein.list(a)
gibt eine neue Liste zurück, wäre also O (n).Wenn Sie Probleme bei der Reihenfolge von Diktaten ignorieren, ist dies möglicherweise besser:
Auf diese Weise vermeiden wir die Suche nach Elementen und generieren eine Liste von Schlüsseln, die wir nicht verwenden.
Python3
quelle
next(iter(dict.values()))
das gleiche Ergebnis erzielen, ohne die Liste zu erstellen.In Python3
quelle
Sie können immer tun:
Auf diese Weise erhalten Sie einen konsistent sortierten (in Bezug auf den eingebauten .hash () - Schlüsselsatz, den Sie verarbeiten können, wenn die Sortierung für Sie eine Bedeutung hat. Das bedeutet, dass beispielsweise numerische Typen auch dann konsistent sortiert werden, wenn Sie das Wörterbuch erweitern.
BEISPIEL
Beachten Sie, dass das Wörterbuch beim Drucken sortiert ist. Aber der Schlüsselsatz ist im Wesentlichen eine Hashmap!
quelle
Für Python 2 und 3:
quelle
Is there any better way to do this?
kurze Weise.quelle
Keine externen Bibliotheken, funktioniert sowohl mit Python 2.7 als auch mit 3.x:
Für einen beliebigen Schlüssel lassen Sie einfach .values () weg
quelle
Unterklassen
dict
sind eine Methode, wenn auch nicht effizient. Wenn Sie hier eine Ganzzahl angeben, wird diese zurückgegebend[list(d)[n]]
. Andernfalls greifen Sie wie erwartet auf das Wörterbuch zu:quelle