web-dev-qa-db-fra.com

Comment vérifier si une valeur existe dans un dictionnaire (python)

J'ai le dictionnaire suivant en python:

d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}

J'ai besoin d'un moyen de trouver si une valeur telle que "un" ou "deux" existe dans ce dictionnaire.

Par exemple, si je voulais savoir si l'index "1" existait, il me suffirait de taper:

"1" in d

Et alors python me dirait si cela est vrai ou faux, mais je dois faire exactement la même chose, sauf pour rechercher si une valeur existe.

212
JimmyK
>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
>>> 'one' in d.values()
True

Par curiosité, un peu de timing comparatif:

>>> T(lambda : 'one' in d.itervalues()).repeat()
[0.28107285499572754, 0.29107213020324707, 0.27941107749938965]
>>> T(lambda : 'one' in d.values()).repeat()
[0.38303399085998535, 0.37257885932922363, 0.37096405029296875]
>>> T(lambda : 'one' in d.viewvalues()).repeat()
[0.32004380226135254, 0.31716084480285645, 0.3171098232269287]

EDIT: Et si vous vous demandez pourquoi ... la raison en est que chacun des éléments ci-dessus renvoie un type d'objet différent, qui peut ne pas convenir aux opérations de recherche:

>>> type(d.viewvalues())
<type 'dict_values'>
>>> type(d.values())
<type 'list'>
>>> type(d.itervalues())
<type 'dictionary-valueiterator'>

EDIT2: Selon la demande dans les commentaires ...

>>> T(lambda : 'four' in d.itervalues()).repeat()
[0.41178202629089355, 0.3959040641784668, 0.3970959186553955]
>>> T(lambda : 'four' in d.values()).repeat()
[0.4631338119506836, 0.43541407585144043, 0.4359898567199707]
>>> T(lambda : 'four' in d.viewvalues()).repeat()
[0.43414998054504395, 0.4213531017303467, 0.41684913635253906]
327
mac

Vous pouvez utiliser

"one" in d.itervalues()

pour tester si "one" figure parmi les valeurs de votre dictionnaire.

27
Sven Marnach

Le dictionnaire Python a get (key) funcion

>>> d.get(key)

Par exemple,

>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
>>> d.get('3')
'three'
>>> d.get('10')
none

Si votre clé n'existe pas, vous retournerez la valeur none.

foo = d[key] # raise error if key doesn't exist
foo = d.get(key) # return none if key doesn't exist

Contenu pertinent pour les versions inférieures à 3.0 et supérieures à 5.0. .

22
Shameem

Utiliser les vues du dictionnaire:

if x in d.viewvalues():
    dosomething()..
10
soulcheck

Différents types pour vérifier que les valeurs existent

d = {"key1":"value1", "key2":"value2"}
"value10" in d.values() 
>> False

Et si liste de valeurs

test = {'key1': ['value4', 'value5', 'value6'], 'key2': ['value9'], 'key3': ['value6']}
"value4" in [x for v in test.values() for x in v]
>>True

Et si liste de valeurs avec des valeurs de chaîne

test = {'key1': ['value4', 'value5', 'value6'], 'key2': ['value9'], 'key3': ['value6'], 'key5':'value10'}
values = test.values()
"value10" in [x for v in test.values() for x in v] or 'value10' in values
>>True
1
sim

Dans Python 3, vous pouvez utiliser la fonction values() du dictionnaire. Il retourne un objet de vue des valeurs. Ceci, à son tour, peut être passé à la fonction iter qui renvoie un objet itérateur. L'itérateur peut être vérifié en utilisant in, comme ceci,

'one' in iter(d.values())

Ou vous pouvez utiliser l'objet view directement car il est similaire à une liste

'one' in d.values()
0
Reed Richards