web-dev-qa-db-fra.com

Comment extraire une paire dictionnaire/clé unique dans des variables

Je n'ai qu'une seule paire clé-valeur dans le dictionnaire. Je veux assigner la clé à une variable .__ et sa valeur à une autre variable. J'ai essayé avec les manières ci-dessous mais j'obtiens l'erreur pour la même chose.

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

Je sais que nous pouvons extraire la clé et la valeur une par une, ou par boucle et iteritems (), mais n’existe-t-il pas un moyen simple de pouvoir affecter les deux en une seule instruction? 

29
user966588

Ajoutez un autre niveau, avec un tuple (juste la virgule):

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

ou avec une liste:

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

ou choisissez le premier élément:

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

Les deux premiers ont l'avantage supplémentaire de générer une exception si votre dictionnaire a plus d'une clé, et les deux fonctionnent sous Python 3, tandis que le dernier devrait être orthographié par k, v = next(iter(d.items())) pour fonctionner.

Démo:

>>> 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() renvoie une liste de n-uplets ainsi:

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

Ou en utilisant next, iter:

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

tu peux faire

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

d.keys () retournera en fait la liste de toutes les clés et d.values ​​retournera la liste de toutes les valeurs, puisque vous avez une seule paire clé: valeur dans d, vous accéderez au premier élément de la liste des clés et des valeurs

3
its me

C'est mieux si vous avez plusieurs éléments dans le dictionnaire, car il ne crée pas réellement de liste, mais donne une seule paire clé-valeur.

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

Bien sûr, si vous avez plus d'un élément dans le dictionnaire, il est impossible de savoir lequel vous allez extraire.

2
kindall

Tu as une liste. Vous devez indexer la liste pour accéder aux éléments.

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

En Python 3:

Réponse courte:

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

ou:

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

ou:

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

Longue réponse:

d.items (), fondamentalement (mais pas réellement) vous donne une liste avec un tuple, qui a 2 valeurs, qui ressemblera à ceci quand imprimé:

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

Vous pouvez le convertir en liste réelle en encapsulant avec list (), ce qui donnera la valeur suivante:

[('a', 1)]
1
Eduard