Ich versuche, über den Index auf das Element eines dict_key zuzugreifen:
test = {'foo': 'bar', 'hello': 'world'}
keys = test.keys() # dict_keys object
keys.index(0)
AttributeError: 'dict_keys' object has no attribute 'index'
Ich will bekommen foo
.
Das gleiche mit:
keys[0]
TypeError: 'dict_keys' object does not support indexing
Wie kann ich das machen?
python
dictionary
python-3.x
key
fj123x
quelle
quelle
dict.keys()
ein Satz wie ein Ansichtsobjekt zurückgegeben, keine Liste (eine Indizierung ist daher nicht möglich). Verwenden Siekeys = list(test)
collections.OrderedDict
Sie, wenn Sie bestellte Schlüssel möchten)Antworten:
Rufen Sie
list()
stattdessen das Wörterbuch auf:In Python 3 gibt die
dict.keys()
Methode ein Wörterbuchansichtsobjekt zurück , das als Menge fungiert. Wenn Sie das Wörterbuch direkt durchlaufen, erhalten Sie auch Schlüssel. Wenn Sie also ein Wörterbuch in eine Liste umwandeln, erhalten Sie eine Liste aller Schlüssel:quelle
dict
Unterklasse übergeben werden, die beispielsweise.keys()
in Python-Code behandelt wird (z. B. kann ein Threadwechsel stattfinden).sorted(dict)
würde genau das gleiche tun; Erstellen Sie eine Liste der Schlüssel in sortierter Reihenfolge.list(dict)
gibt Ihnen die Liste in Wörterbuchreihenfolge.keys = [*test]
Keine vollständige Antwort, aber vielleicht ein nützlicher Hinweis. Wenn es wirklich das erste Element ist, das Sie möchten *, dann
ist viel schneller als
für große dikte, da das ganze nicht im speicher gespeichert werden muss.
Für 10.000.000 Artikel war es fast 40.000 Mal schneller.
* Das erste Element, falls ein Diktat nur ein pseudozufälliges Element vor Python 3.6 ist (danach wird es in der Standardimplementierung bestellt, obwohl nicht empfohlen wird, sich darauf zu verlassen).
quelle
Ich wollte ein Paar "Schlüssel" und "Wert" eines ersten Wörterbuchelements. Ich habe den folgenden Code verwendet.
quelle
Herkömmliche Methode zum Anhängen der Schlüssel an eine statisch definierte Liste und anschließendes Indizieren derselben
quelle
ls = list(test.keys())
? Ich finde es einfacher.In vielen Fällen kann dies ein XY-Problem sein . Warum indizieren Sie Ihre Wörterbuchschlüssel nach Position? Müssen Sie wirklich? Bis vor kurzem wurden Wörterbücher nicht einmal in Python bestellt, sodass der Zugriff auf das erste Element willkürlich war.
Ich habe gerade Python 2-Code in Python 3 übersetzt:
Das ist nicht schön, aber auch nicht sehr schlecht. Zuerst wollte ich es durch das Ungeheuerliche ersetzen
bevor mir klar wurde, ist das alles viel besser geschrieben als
das funktioniert gut.
Ich glaube, dass in vielen anderen Fällen die Indizierung von Wörterbuchschlüsseln nach Position vermieden werden kann. Obwohl Wörterbücher in Python 3.7 bestellt werden, ist es nicht schön, sich darauf zu verlassen. Der obige Code funktioniert nur, weil der Inhalt von
some_list
kürzlich aus dem Inhalt von erstellt wurded
.Sehen Sie sich Ihren Code genau an, wenn Sie wirklich über einen
disk_keys
Index auf ein Element zugreifen müssen . Vielleicht musst du nicht.quelle
Versuche dies
Das Ergebnis sieht so aus. ['foo', 'hallo']
Weitere mögliche Lösungen finden Sie hier .
quelle