it-swarm.com.de

Wie man ein einzelnes Schlüssel-Wert-Paar in Variablen extrahiert

Ich habe nur ein Schlüsselpaar im Wörterbuch. Ich möchte einer Variablen den Schlüssel Und eine andere Variable den Wert zuweisen. Ich habe es mit den folgenden Möglichkeiten versucht, aber ich bekomme Fehler für die gleichen.

>>> d ={"a":1}

>>> d.items()
[('a', 1)]

>>> (k,v) = d.items()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

>>> (k, v) = list(d.items())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

Ich weiß, dass wir Schlüssel und Werte einzeln oder durch for-Schleife und iteritems () extrahieren können, aber gibt es nicht eine einfache Möglichkeit, beide in einer einzigen Anweisung zuzuweisen? 

29
user966588

Fügen Sie eine weitere Ebene mit einem Tupel (nur das Komma) hinzu:

(k, v), = d.items()

oder mit einer Liste:

[(k, v)] = d.items()

oder wähle das erste Element aus:

k, v = d.items()[0]

Die ersten beiden haben den zusätzlichen Vorteil, dass sie eine Ausnahme auslösen, wenn Ihr Wörterbuch mehr als einen Schlüssel hat, und beide arbeiten mit Python 3, während letzteres als k, v = next(iter(d.items())) geschrieben werden muss, um zu funktionieren.

Demo:

>>> d = {'foo': 'bar'}
>>> (k, v), = d.items()
>>> k, v
('foo', 'bar')
>>> [(k, v)] = d.items()
>>> k, v
('foo', 'bar')
>>> k, v = d.items()[0]
>>> k, v
('foo', 'bar')
>>> k, v = next(iter(d.items()))  # Python 2 & 3 compatible
>>> k, v
('foo', 'bar')
58
Martijn Pieters

items() gibt eine Liste von Tupeln zurück.

(k,v) = d.items()[0]
5
Farhadix
>>> d = {"a":1}
>>> [(k, v)] = d.items()
>>> k
'a'
>>> v
1

Oder mit next, iter:

>>> k, v = next(iter(d.items()))
>>> k
'a'
>>> v
1
>>>
3
falsetru
    d ={"a":1}

du kannst tun

    k, v = d.keys()[0], d.values()[0]

d.keys () gibt tatsächlich eine Liste aller Schlüssel zurück, und d.values ​​gibt eine Liste aller Werte zurück, da Sie einen einzigen Schlüssel haben: Wertepaar in d Sie werden auf das erste Element in der Liste der Schlüssel und Werte zugreifen

3
its me

Dies ist am besten, wenn Sie viele Elemente im Wörterbuch haben, da es keine Liste erstellt, sondern nur ein Schlüssel-Wert-Paar ergibt.

k, v = next(d.iteritems())

Wenn Sie mehr als ein Element im Wörterbuch haben, gibt es natürlich keine Möglichkeit herauszufinden, welches Element Sie erhalten.

2
kindall

Du hast eine Liste. Sie müssen die Liste indizieren, um auf die Elemente zugreifen zu können.

(k,v) = d.items()[0]

In Python 3:

Kurze Antwort:

[(k, v)] = d.items()

oder:

(k, v) = list(d.items())[0]

oder:

(k, v), = d.items()

Lange Antwort:

d.items () gibt Ihnen im Grunde (aber nicht wirklich) eine Liste mit einem Tuple mit 2 Werten, die beim Drucken folgendermaßen aussehen:

dict_items([('a', 1)])

Sie können sie in die tatsächliche Liste konvertieren, indem Sie sie mit list () umschließen, was zu diesem Wert führt:

[('a', 1)]
1
Eduard
key = list(foo.keys())[0]
value = foo[key]

Wenn Sie nur den Wörterbuchschlüssel möchten und sich nicht für den Wert interessieren, beachten Sie, dass (key, ), = foo.items() funktioniert nicht. Sie müssen diesen Wert einer Variablen zuweisen.

Also brauchst du (key, _), = foo.items()

Abbildung in Python 3.7.2:

>>> foo = {'a': 1}
>>> (key, _), = foo.items()
>>> key
'a'
>>> (key, ), = foo.items()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 1)
0
KevinG