Cómo comprobar si existe un valor en un diccionario (python)


Tengo el siguiente diccionario en python:

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

Necesito una manera de encontrar si un valor como "uno" o "dos" existe en este diccionario.

Por ejemplo, si quisiera saber si existe el índice "1" simplemente tendría que escribir:

"1" in d

Y luego python me diría si eso es verdadero o falso, sin embargo, necesito hacer exactamente lo mismo excepto para encontrar si existe un valor.

Author: Cœur, 2011-11-21

5 answers

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

Por curiosidad, algunos tiempos comparativos:

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

EDITAR: Y en caso de que te preguntes por qué... la razón es que cada uno de los anteriores devuelve un tipo diferente de objeto, que puede o no ser adecuado para operaciones de búsqueda:

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

EDIT2: Según la petición en los comentarios...

>>> 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]
 264
Author: mac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-21 16:58:29

Puedes usar

"one" in d.itervalues()

Para probar si "one" está entre los valores de tu diccionario.

 25
Author: Sven Marnach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-21 16:22:19

El diccionario Python tiene get (key) función

>>> d.get(key)

Por Ejemplo,

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

Si su clave no existe, devolverá el valor none.

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

Contenido relevante para versiones inferiores a 3.0 y superiores a 5.0. .

 18
Author: Shameem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-15 11:28:26

Usar vistas de diccionario:

if x in d.viewvalues():
    dosomething()..
 9
Author: soulcheck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-21 16:25:08

En Python 3 puedes usar la función values() del diccionario. Devuelve un objeto view de los valores. Esto, a su vez, se puede pasar a la función iter que devuelve un objeto iterador. El iterador se puede comprobar usando in, así,

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

O puede usar el objeto view directamente ya que es similar a una lista

'one' in d.values()
 1
Author: Reed Richards,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-19 01:40:05