2012-09-11 14 views
11

¿Cómo verifica un programador python si un valor de un diccionario coincide con una condición (es mayor que 0 en mi caso). Estoy buscando la forma más "pitónica" que tenga un impacto mínimo en el rendimiento.Compruebe si el valor de un diccionario coincide con una condición

mi diccionario:

pairs = { 'word1':0, 'word2':0, 'word3':2000, 'word4':64, 'word5':0, 'wordn':8 } 

que utiliza estos métodos (2 monstruosas?) Hasta el momento.

1:

options = pairs.values() # extract values 
for i in options: 
    if i > 0: 
     return True 
return False 

2:

options = sorted(pairs.items(), key=lambda e: e[1], reverse=True) # rank from max to min 
if options[0][1] > 0: 
    return True 
else: 
    return False 
+0

¿Está marcando solo una entrada en el diccionario (como dice su texto) o todas las entradas (como su código está haciendo)? – smcg

+0

@smcg: Perdón por mi inglés. Quise decir todas las entradas;] – Firebowl2000

Respuesta

20

Usted puede utilizar any[docs]:

>>> pairs = { 'word1':0, 'word2':0, 'word3':2000, 'word4':64, 'word5':0, 'wordn':8 } 
>>> any(v > 0 for v in pairs.itervalues()) 
True 
>>> any(v > 3000 for v in pairs.itervalues()) 
False 

Ver también all[docs]:

>>> all(v > 0 for v in pairs.itervalues()) 
False 
>>> all(v < 3000 for v in pairs.itervalues()) 
True 

Dado que está utilizando Python 2.7, .itervalues() es probablemente un poco mejor que .values() porque no crea una nueva lista.

+0

Gracias DSM! Eso es muy útil. – Firebowl2000

+0

Iría tan lejos como para decir que esta es la manera pitónica de hacer esto. –

+0

A menudo me pregunto cuánta diferencia realmente hay entre '.values' y' .itervalues' - Después de todo, no estás creando objetos nuevos, solo nuevas referencias ... Supongo que vale la pena preguntar cuánta memoria es una referencia de python en realidad toma ... (Usualmente solo uso 'values' ya que no será necesario cambiarlo cuando mueva mi código a py3k ... pero tal vez no debería ...) Buena respuesta. Esta es definitivamente la manera de hacerlo (+1) – mgilson

Cuestiones relacionadas