Eliminar entradas de un diccionario basado en valores

Tengo un diccionario con par de clave-valor carácter-entero. Quiero eliminar todos esos pares de valores clave donde el valor es 0.

Por ejemplo:

>>> hand {'a': 0, 'i': 0, 'm': 1, 'l': 1, 'q': 0, 'u': 0} 

Quiero reducir el mismo diccionario a esto:

 >>> hand {'m': 1, 'l': 1} 

¿Hay una manera fácil de hacer eso?

Puede utilizar una comprensión de dictado :

 >>> { k:v for k, v in hand.items() if v } {'m': 1, 'l': 1} 

O, en Python anterior a 2.7, el constructor de dict en combinación con una expresión de generador :

 >>> dict((k, v) for k, v in hand.iteritems() if v) {'m': 1, 'l': 1} 
 hand = {k: v for k, v in hand.iteritems() if v != 0} 

Para Pre-Python 2.7:

 hand = dict((k, v) for k, v in hand.iteritems() if v != 0) 

En ambos casos, está filtrando las claves cuyos valores son 0 y asignando una hand al nuevo diccionario.

Si no desea crear un diccionario nuevo, puede usar esto:

 >>> hand = {'a': 0, 'i': 0, 'm': 1, 'l': 1, 'q': 0, 'u': 0} >>> for key in list(hand.keys()): ## creates a list of all keys ... if hand[key] == 0: ... del hand[key] ... >>> hand {'m': 1, 'l': 1} >>> 

¿Una comprensión del dict?

 {k: v for k, v in hand.items() if v != 0} 

En Python 2.6 y anteriores:

 dict((k, v) for k, v in hand.items() if v != 0)