web-dev-qa-db-fra.com

Comment obtenir une valeur unique de dict avec une entrée unique?

J'ai vu Comment extraire dictionnaire paire simple clé-valeur dans les variables suggérant:

d = {"a":1}
(k, v), = d.items()

Mais: je me soucie seulement de la valeur . Et je veux transmettre cette valeur à une méthode; comme:

foo(v)

La question est donc la suivante: existe-t-il une commande simple qui fonctionne à la fois pour python2 et python3 qui me donne cette valeur directement, sans le détour de l'affectation "Tuple"?

Ou y a-t-il un moyen de faire en sorte que l'affectation Tuple fonctionne dans mon cas d'utilisation d'une méthode?

5
GhostCat

list(d.values())[0] sera évalué à 1. Comme indiqué dans les commentaires, la conversion en list n'est nécessaire que dans python3.

next(iter(d.values())) est une autre possibilité (probablement plus d’économie de mémoire car il n’est pas nécessaire de créer une liste)

Les deux solutions testent localement avec python 3.6.0 et in TIO avec python 2 .

7
B. Barbieri

next(iter(d.values())) est le moyen naturel d'extraire la seule valeur d'un dictionnaire. La conversion en list pour extraire le seul élément n'est pas nécessaire.

Il est également performant parmi les options disponibles (testé sur Python 3.6):

d = [{'a': i} for i in range(100000)]

%timeit [next(iter(i.values())) for i in d]  # 50.1 ms per loop
%timeit [list(i.values())[0] for i in d]     # 54.8 ms per loop
%timeit [list(i.values()).pop() for i in d]  # 81.8 ms per loop
2
jpp

existe-t-il une commande simple qui fonctionne à la fois pour python2 et python3 qui me donne cette valeur directement, sans le détour de l'affectation "Tuple" ?

La solution utilisant dict.copy() (pour conserver le dict d'origine) et dict.popitem():

d = {"a":1}
foo(d.copy().popitem()[1])
1
RomanPerekhrest

Si vous connaissez la clé, vous pouvez simplement faire:

d["a"] 
output :
1

et si vous ne connaissez pas la clé:

for key in d.keys():
d[key]

#so basically you have to do :

for key in d.keys():
f00(d[key])
1
user7635602