2011-11-21 19 views
153

tengo el siguiente diccionario en Python:¿Cómo comprobar si existe un valor en un diccionario (pitón)

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

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

Por ejemplo, si lo que quería saber si el índice "1" existido yo simplemente tiene que escribir:

"1" in d 

Y luego pitón me gustaría saber si es verdadero o falso, sin embargo necesito haz exactamente lo mismo excepto para encontrar si existe un valor.

Respuesta

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

Por curiosidad, algunos de tiempo comparativo:

>>> 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: Y en caso de que uno se pregunta por qué ... La razón es que cada uno del anterior devuelve un tipo diferente de objeto, que puede o no puede ser muy 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] 
+0

no tengo Python a mano, ¿podría volver a ejecutar las pruebas con 'cuatro' en lugar de 'uno'? – soulcheck

+0

@soulcheck - ¡Revisa mi segunda edición! : o – mac

+2

no fue necesario después de todo, a menos que se ejecute en dict más grande. Supongo que la sobrecarga en valores() se produce al copiar la lista de valores y en viewvalues ​​() al mantener viva la vista. – soulcheck

23

Puede utilizar

"one" in d.itervalues() 

para probar si "one" se encuentra entre los valores de su diccionario.

+0

@SvenMaramach Obviamente, mira los valores, pero ¿cómo verías las claves? ¿Se puede aplicar a las llaves? – cbbcbail

+2

@cbbcbail: Para comprobar si '" uno "' aparece entre las teclas de 'd', simplemente use' 'one '' en d'. –

+0

¿Cómo se verifica si cierta clave contiene un valor? (para evitar duplicados) – jester112358

8

Use vistas del diccionario:

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

diccionario de Python tiene get(key) funcion

>>> 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 hace no existe, regresará none valor.

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

contenido pertinente a las versiones de menos de 3,0 y mayor que 5,0. .

+6

No responde la pregunta. OP preguntó acerca de un valor como en 'key: value' y no key. – akshaynagpal

Cuestiones relacionadas