it-swarm.com.de

Wie finden Sie den ersten Schlüssel in einem Wörterbuch?

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
}
73
slagoy

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'
133
maxbellec

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]
53
ylnor

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'
12
Ryan Haining

Der dict-Typ ist eine ungeordnete - Zuordnung, daher gibt es kein "erstes" Element.

Was Sie wollen, ist wahrscheinlich collections.OrderedDict.

9
Hurkyl

Bei Python 3 (siehe unten) entfällt der Aufwand für die Listenkonvertierung:

first = next(iter(prices.values()))
5
Shital Shah

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.

3
narwanimonish

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'

2
Amit Sharma

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. 

0
kylie.a

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

0
Mark M

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
0
turiyag