Ich versuche, mein Programm "banana"
aus dem Wörterbuch auszudrucken. Was wäre der einfachste Weg, dies zu tun?
Bitte beachten Sie, dass ich not versuche, mein Programm dazu zu veranlassen, den mit "banana"
verknüpften Wert auszudrucken, sondern "banana"
mit einer for - Schleife auszudrucken. Wenn Sie also den Schlüssel ausführen, wäre jeder Schlüssel ebenfalls vorhanden gedruckt.
Das ist mein Wörterbuch:
prices = {
"banana" : 4,
"Apple" : 2,
"orange" : 1.5,
"pear" : 3
}
Wenn Sie nur einen Schlüssel des Wörterbuchs benötigen, ist dies wahrscheinlich der kürzeste gültige Code für Python 2 und 3:
my_dict = {'foo': 'bar'}
next(iter(my_dict)) # outputs 'foo'
Ein Wörterbuch ist nicht indiziert, aber es ist irgendwie geordnet. Folgendes würde Ihnen den ersten vorhandenen Schlüssel geben:
list(my_dict.keys())[0]
Wenn Sie von einem regulären dict
sprechen, bedeutet der "erste Schlüssel" nichts. Die Schlüssel sind nicht auf eine Weise bestellt, auf die Sie sich verlassen können. Wenn Sie Ihren dict
durchlaufen, werden Sie "banana"
wahrscheinlich nicht als erstes sehen.
Wenn Sie die Dinge in Ordnung halten müssen, müssen Sie OrderedDict
verwenden und nicht nur ein einfaches Wörterbuch.
import collections
prices = collections.OrderedDict((
("banana", 4),
("Apple", 2),
("orange", 1.5),
("pear", 3),
))
Wenn Sie dann alle Schlüssel in der Reihenfolge sehen möchten, können Sie dies tun, indem Sie durchlaufen
for k in prices:
print(k)
Sie können alternativ alle Schlüssel in eine Liste aufnehmen und dann damit arbeiten
ks = list(prices)
print(ks[0]) # will print "banana"
Eine schnellere Möglichkeit, das first - Element abzurufen, ohne eine Liste zu erstellen, wäre der Aufruf von next
im Iterator. Dies lässt sich jedoch nicht gut verallgemeinern, wenn versucht wird, das nth
-Element abzurufen
>>> next(iter(prices))
'banana'
Der dict
-Typ ist eine ungeordnete - Zuordnung, daher gibt es kein "erstes" Element.
Was Sie wollen, ist wahrscheinlich collections.OrderedDict
.
Bei Python 3 (siehe unten) entfällt der Aufwand für die Listenkonvertierung:
first = next(iter(prices.values()))
So einfach wird die Antwort laut mir sein
first = list(prices)[0]
wenn Sie das Wörterbuch in eine Liste konvertieren, werden die Schlüssel ausgegeben und der erste Schlüssel aus der Liste ausgewählt.
d.keys () [0], um den individuellen Schlüssel zu erhalten.
Update: - @ AlejoBernardin, bin nicht sicher, warum Sie sagten, dass es nicht funktioniert hat. hier habe ich nachgesehen und es funktionierte . importsammlungen
prices = collections.OrderedDict((
("banana", 4),
("Apple", 2),
("orange", 1.5),
("pear", 3),
))
prices.keys()[0]
'Banane'
Wie viele andere darauf hingewiesen haben, gibt es in einem Wörterbuch keinen ersten Wert. Die Sortierung ist willkürlich und Sie können sich nicht darauf verlassen, dass die Sortierung bei jedem Zugriff auf das Wörterbuch gleich ist. Wenn Sie jedoch die Schlüssel drucken möchten, gibt es mehrere Möglichkeiten:
for key, value in prices.items():
print(key)
Diese Methode verwendet die Tuple-Zuweisung, um auf den Schlüssel und den Wert zuzugreifen. Dies ist praktisch, wenn Sie aus irgendeinem Grund auf den Schlüssel und den Wert zugreifen müssen.
for key in prices.keys():
print(key)
Dies gibt nur Zugriff auf die Schlüssel, wie die keys()
-Methode impliziert.
Verwenden Sie eine for-Schleife, die alle Schlüssel in prices
durchläuft:
for key, value in prices.items():
print key
print "price: %s" %value
Stellen Sie sicher, dass Sie prices.items()
in prices.iteritems()
ändern, wenn Sie Python 2.x verwenden
Also habe ich diese Seite gefunden, als ich versuchte, etwas zu optimieren, um den einzigen Schlüssel eines Wörterbuchs mit bekannter Länge 1 zu nehmen und nur den Schlüssel zurückzugeben. Der folgende Vorgang war der schnellste für alle Wörterbücher, die ich bis zur Größe 700 ausprobierte.
Ich habe 7 verschiedene Ansätze ausprobiert und festgestellt, dass diese auf meinem 2014er Macbook mit Python 3.6 am besten war:
def first_5():
for key in biased_dict:
return key
Die Ergebnisse der Profilierung waren:
2226460 / s with first_1
1905620 / s with first_2
1994654 / s with first_3
1777946 / s with first_4
3681252 / s with first_5
2829067 / s with first_6
2600622 / s with first_7
Alle Ansätze, die ich ausprobiert habe, sind hier:
def first_1():
return next(iter(biased_dict))
def first_2():
return list(biased_dict)[0]
def first_3():
return next(iter(biased_dict.keys()))
def first_4():
return list(biased_dict.keys())[0]
def first_5():
for key in biased_dict:
return key
def first_6():
for key in biased_dict.keys():
return key
def first_7():
for key, v in biased_dict.items():
return key