2010-09-17 4 views
6
dict1=({"EMP$$1":1,"EMP$$2":2,"EMP$$3":3}) 

¿Cómo comprobar si EMP existe en el diccionario utilizando PythonCompruebe si hay un patrón clave en un diccionario en Python

dict1.get("EMP##") ?? 
+0

No está del todo claro lo que estás tratando de hacer. ¿Puedes reformular tu pregunta? Proporcionar entradas y salidas de muestra ayudaría. –

Respuesta

19

No está del todo claro lo que quiere hacer.

Puede bucle a través de las claves en las teclas de selección dict usando the startswith() method:

>>> for key in dict1: 
...  if key.startswith("EMP$$"): 
...   print "Found",key 
... 
Found EMP$$1 
Found EMP$$2 
Found EMP$$3 

Se puede utilizar una lista por comprensión para obtener todos los valores que coinciden con:

>>> [value for key,value in dict1.items() if key.startswith("EMP$$")] 
[1, 2, 3] 

Si lo que desea para saber si una clave coincide, puede usar the any() function:

>>> any(key.startswith("EMP$$") for key in dict1) 
True 
+0

He intentado esto como en su primer ejemplo y puse un más después de él, la condición de la pieza if parece estar equivocada ... – Rajeev

+1

Intenté este enfoque y funciona como el autor pretendía. Agregar un else también funciona para mí. ¿Qué error estás recibiendo? –

0

No hay manera para que coincida con las claves de diccionario como este. Sugiero que reconsidere su estructura de datos para este problema. Si esto tiene que ser muy rápido, podrías usar algo así como un árbol de sufijos.

6

Este enfoque me parece contrario a la intención de un diccionario.

Un diccionario se compone de claves hash que tienen valores asociados a ellas. El beneficio de esta estructura es que proporciona búsquedas muy rápidas (del orden de O (1)). Al buscar a través de las claves, estás negando ese beneficio.

Sugeriría reorganizar su diccionario.

dict1 = {"EMP$$": {"1": 1, "2": 2, "3": 3} } 

Entonces, la búsqueda de "EMP $$" es tan simple como

if "EMP$$" in dict1: 
    #etc... 
2

Es necesario ser mucho más específico con lo que quiere hacer. Sin embargo, suponiendo que el diccionario que diste:

dict1={"EMP$$1":1, "EMP$$2":2, "EMP$$3":3} 

Si quería saber si una clave específica estaba presente antes de intentar pedir que usted podría:

dict1.has_key('EMP$$1') 
True 

devoluciones True como dict1 tiene la llave EMP$$1 .

También puede olvidarse de la comprobación de claves y se basan en el valor de retorno por defecto de dict1.get():

dict1.get('EMP$$5',0) 
0 

devoluciones 0 por defecto dada dict1 no tiene una clave EMP$$5.

De manera similar también se puede utilizar una estructura `try/excepto/capturar y manejar las llaves perdidas:

try: 
    dict1['EMP$$5'] 
except KeyError, e: 
    # Code to deal w key error 
    print 'Trapped key error in dict1 looking for %s' % e 

Las otras respuestas a esta pregunta son también grandes, pero necesitamos más información para ser más preciso.

+0

'.has_key' está en desuso – SilentGhost

+0

SilentGhost es correcto. Use la tecla 'form in dict' en lugar de dict.has_key (clave). http://docs.python.org/library/stdtypes.html#dict.has_key –

+0

@SilentGhost - gracias, lo descartaré entonces. – dtlussier

Cuestiones relacionadas