Schlüsselwort aus dem einzelnen Elementwörterbuch in Python extrahieren

Wenn ich weiß, dass meine Wörterbücher immer ein einziges Element haben, gibt es eine Möglichkeit, den Schlüsselnamen zu extrahieren, ohne eine Liste zu durchlaufen? Ich mache es derzeit so.

data = {'foo': [1, 2, 3]} key_name = data.keys()[0] 

Gibt es eine effizientere Technik?

3 Solutions collect form web for “Schlüsselwort aus dem einzelnen Elementwörterbuch in Python extrahieren”

Iterating Wörterbuch liefert Schlüssel.

Mit dem next , iter :

 >>> data = {'foo': [1, 2, 3]} >>> next(iter(data)) 'foo' 

Benchmark:

 In [1]: data = {'foo': [1, 2, 3]} In [2]: %timeit next(iter(data)) 1000000 loops, best of 3: 197 ns per loop In [3]: %timeit data.keys()[0] 10000000 loops, best of 3: 155 ns per loop In [4]: %timeit data.iterkeys().next() 1000000 loops, best of 3: 226 ns per loop In [9]: %timeit k, = data.keys() 10000000 loops, best of 3: 151 ns per loop In [10]: %timeit k, = data # <--- fastest 10000000 loops, best of 3: 81.4 ns per loop 

Verwenden Sie iterkeys :

 data.iterkeys().next() 'foo' 

Angenommen, Sie verwenden python 2

Für python2 oder python 3

 k, = data.keys() print (k) 'foo' 

Angenommen, du brauchst auch den Wert an einem gewissen Punkt, die meisten "pythonischen" und robusten Weg wäre wahrscheinlich, einen Versuch zu verwenden … außer Block wie folgt:

 data = {'foo': [1, 2, 3]} try: key, value = data.items()[0] except IndexError: raise Exception("Your dictionary didn't have the element you thought it had") 

Hier kannst du einfach dein Wörterbuch in eine Liste von 2-Tupeln (mit items ) umwandeln und das erste davon herausholen und den Fall fangen, wo es keine Gegenstände gibt. Wenn das Wörterbuch mehr als ein Element hat, kann jeder der Schlüssel: Wertpaare zurückgegeben werden und Ihre Ergebnisse sind unbestimmt.

Ohne den konkreten Anwendungsfall zu diskutieren – was Sie offensichtlich viel vertrauter sind als ich – ist es sinnvoll, darauf hinzuweisen, dass selbst wenn Sie erwarten, dass eine Datenstruktur bestimmte Inhalte hat, wird es fast immer Randfälle geben, wo diese Annahme falsch ist und Umgang mit diesen Ausnahmen anmutig wird für mehr robusten Code zu machen.

Dieser Code sollte in beiden Python 2 und 3 arbeiten und angesichts der iteritems , dass in Ihrem regulären Fall gibt es nur ein Element zur Verfügung, die iteritems Methode wird vernachlässigende Vorteil in Python 2 über seine Standard-Gegenstück, items .

Bearbeiten:

Um diesen Punkt der Effizienz zu erweitern ( items vs iteritems in Python 2), zeigen die folgenden (schnellen und schmutzigen) Timings einen sehr geringen Vorteil des ersteren gegenüber dem letzteren:

 $ python2.7 -m timeit "data = {'foo': [1, 2, 3]}; _ = data.items()[0]" 1000000 loops, best of 3: 0.316 usec per loop $ python2.7 -m timeit "data = {'foo': [1, 2, 3]}; _ = next(data.iteritems())" 1000000 loops, best of 3: 0.377 usec per loop 

Darüber hinaus, Extrahieren sowohl der Schlüssel und Wert zur gleichen Zeit gibt eine leichte zusätzliche Einsparung über Eins zu einem Zeitpunkt.

  • Erkennung, ob Bild Farbe, Graustufen oder Schwarz-Weiß mit Python / PIL ist
  • IP-Adresse mit dem Pocket-Sockel-Modul finden
  • Python-Liste zu verschachtelten Schlüsseln
  • Python spaltete einen String mit mindestens 2 Whitespaces
  • Selen Chromedriver "Fehler beim Laden der Erweiterung"
  • Erstellen von Wörterbuch mit Listen- / Tupel-Elementen als Schlüssel
  • Um Zeichenkette in Variablenname zu konvertieren [doppelte]
  • Python dict count
  • Grammatische Liste Verbinden Sie sich in Python
  • Buildozer konnte den letzten Befehl nicht ausführen
  • Super () und @staticmethod interaktion
  • Python ist die beste Programmiersprache der Welt.