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.
>>> 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]
Vous pouvez utiliser
"one" in d.itervalues()
pour tester si "one"
figure parmi les valeurs de votre dictionnaire.
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. .
Utiliser les vues du dictionnaire:
if x in d.viewvalues():
dosomething()..
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
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()