Wenn eine mydict
nicht leer ist, greife ich auf ein beliebiges Element zu:
mydict[mydict.keys()[0]]
Gibt es einen besseren Weg, dies zu tun?
Auf Python 3 zerstörungsfrei und iterativ:
next(iter(mydict.values()))
Auf Python 2 zerstörungsfrei und iterativ:
mydict.itervalues().next()
Wenn Sie möchten, dass es in Python 2 und 3 funktioniert, können Sie das Paket six
verwenden:
six.next(six.itervalues(mydict))
an diesem Punkt ist es jedoch ziemlich kryptisch und ich würde lieber Ihren Code bevorzugen.
Wenn Sie ein Element entfernen möchten, führen Sie folgende Schritte aus:
key, value = mydict.popitem()
Beachten Sie, dass "first" hier kein passender Begriff ist. Dies ist ein beliebiges Element, da dict
kein sortierter Typ ist.
Wenn Sie nur auf ein Element zugreifen müssen (durch Zufall das erste Element sein, da Diktate die Reihenfolge nicht garantieren), können Sie dies einfach in Python 2 tun:
my_dict.keys()[0] -> key of "first" element
my_dict.values()[0] -> value of "first" element
my_dict.items()[0] -> (key, value) Tuple of "first" element
Bitte beachten Sie, dass Python (nach meinem besten Wissen) nicht garantiert, dass zwei aufeinanderfolgende Aufrufe einer dieser Methoden eine Liste mit derselben Reihenfolge zurückgeben. Dies wird in Python3 nicht unterstützt.
In python3, Der Weg:
dict.keys()
gib einen Wert in type: dict_keys () zurück. Wir erhalten einen Fehler, wenn das erste Mitglied des Schlüssels von dict auf folgende Weise erhalten wurde:
dict.keys()[0]
TypeError: 'dict_keys' object does not support indexing
Zum Schluss konvertiere ich dict.keys () in list @ 1st und erhielt das erste Mitglied durch List-Splice-Methode:
list(dict.keys())[0]
next(iter(mydict))
next(iter(mydict.values()))
next(iter(mydict.items())) # or next(iter(mydict.viewitems())) in python 2
Die ersten beiden sind Python 2 und 3. Die letzten beiden sind in Python 3 faul, aber nicht in Python 2.
Wie bereits erwähnt, gibt es kein "erstes Element", da Wörterbücher keine garantierte Reihenfolge haben (sie werden als Hashtabellen implementiert). Wenn Sie zum Beispiel den Wert haben möchten, der dem kleinsten Schlüssel entspricht, wird thedict[min(thedict)]
dies tun. Wenn Sie sich für die Reihenfolge interessieren, in der die Schlüssel eingefügt wurden, d. H. Mit "zuerst" meinen Sie "frühestens eingefügt", können Sie in Python 3.1 collection.OrderedDict verwenden, das sich auch in der kommenden Python 2.7 befindet. Laden Sie bei älteren Python-Versionen den bestellten dict backport (2.4 und höher) herunter, installieren Sie ihn und verwenden Sie ihn. Hier finden Sie hier .
Python 3.7Jetzt Diktiere sind Einfügungsreihenfolge.
Wie wäre es damit. Hier noch nicht erwähnt.
py 2 & 3
a = {"a":2,"b":3}
a[list(a)[0]] # the first element is here
>>> 2
Das Ignorieren von Problemen im Zusammenhang mit der Diktorbestellung könnte besser sein:
next(dict.itervalues())
Auf diese Weise vermeiden wir das Nachschlagen von Elementen und das Generieren einer Liste von Schlüsseln, die wir nicht verwenden.
next(iter(dict.values()))
In Python3
list(dict.values())[0]
Für beide Python 2 und 3:
import six
six.next(six.itervalues(d))
Sie können immer tun:
for k in sorted(d.keys()):
print d[k]
Dadurch erhalten Sie einen konsistent sortierten (in Bezug auf builtin . Hash ()) ermittelten Satz von Schlüsseln, die Sie bearbeiten können, wenn die Sortierung eine Bedeutung für Sie hat. Das bedeutet beispielsweise, dass numerische Typen auch dann konsistent sortiert werden, wenn Sie das Wörterbuch erweitern.
BEISPIEL
# lets create a simple dictionary
d = {1:1, 2:2, 3:3, 4:4, 10:10, 100:100}
print d.keys()
print sorted(d.keys())
# add some other stuff
d['peter'] = 'peter'
d['parker'] = 'parker'
print d.keys()
print sorted(d.keys())
# some more stuff, numeric of different type, this will "mess up" the keys set order
d[0.001] = 0.001
d[3.14] = 'pie'
d[2.71] = 'Apple pie'
print d.keys()
print sorted(d.keys())
Beachten Sie, dass das Wörterbuch beim Drucken sortiert wird. Der Schlüsselsatz ist jedoch im Wesentlichen eine Hashmap!
einfachste Möglichkeit für Python3:
list(dict.keys())[0]
Ein Update der Antwort von @ swK, basierend auf dem Kommentar von @alldayremix:
In Python 3 verwenden Sie:
list(my_dict.keys())[0] -> key of "first" element
list(my_dict.values())[0] -> value of "first" element
list(my_dict.items())[0] -> (key, value) Tuple of "first" element
Keine externen Bibliotheken, funktioniert auf Python 2.7 und 3.x:
>>> list(set({"a":1, "b": 2}.values()))[0]
1
Für aribtrary key einfach weglassen .values ()
>>> list(set({"a":1, "b": 2}))[0]
'a'
first_key, *rest_keys = mydict
Die Unterklasse dict
ist eine Methode, die jedoch nicht effizient ist. Wenn Sie hier eine Ganzzahl angeben, wird d[list(d)[n]]
zurückgegeben.
class mydict(dict):
def __getitem__(self, value):
if isinstance(value, int):
return self.get(list(self)[value])
else:
return self.get(value)
d = mydict({'a': 'hello', 'b': 'this', 'c': 'is', 'd': 'a',
'e': 'test', 'f': 'dictionary', 'g': 'testing'})
d[0] # 'hello'
d[1] # 'this'
d['c'] # 'is'