Retener todas las entradas excepto una clave de python

Tengo un diccionario de python. Solo para dar contexto, estoy tratando de escribir mi propia unidad de validación cruzada simple.

Básicamente, lo que quiero es obtener todos los valores excepto las claves dadas. Y dependiendo de la entrada, devuelve todos los valores de un diccionario, excepto a los que se han dado.

Entonces, si la entrada es 2 y 5, entonces los valores de salida no tienen los valores de las teclas 2 y 5.

for key, value in your_dict.items(): if key not in your_blacklisted_set: print value 

la belleza es que este ejemplo de pseudocódigo es un código de Python válido.

también se puede express como una lista de comprensión:

 resultset = [value for key, value in your_dict.items() if key not in your_blacklisted_set] 

Sólo por diversión con sets.

 keys = set(dict.keys()) excludes = set([...]) for key in keys.difference(excludes): print dict[key] 

Dado un diccionario decir

 d = { 2: 2, 5: 16, 6: 5, 7: 6, 11: 17, 12: 9, 15: 18, 16: 1, 18: 16, 19: 17, 20: 10 } 

entonces el ejemplo de comprensión simple alcanzaría lo que posiblemente desees

 [v for k,v in d.iteritems() if k not in (2,5)] 

Este ejemplo enumera todos los valores no con claves {2,5}

por ejemplo, la O / P de la comprensión anterior es

 [5, 6, 1, 17, 9, 18, 1, 16, 17, 10] 
 keys = ['a', 'b'] a_dict = {'a':1, 'b':2, 'c':3, 'd':4} [a_dict.pop(key) for key in keys] 

Después de quitar las teclas para ser descartadas, a_dict conservará las que está buscando.

Si su objective es devolver un nuevo diccionario, con todas las claves / valores excepto uno o unos pocos, use lo siguiente:

 exclude_keys = ['exclude', 'exclude2'] new_d = {k: d[k] for k in set(list(d.keys())) - set(exclude_keys)} 

donde 'exclude' puede ser reemplazado por (una lista de) clave (s) que deben ser excluidas.

¿Qué tal algo a lo largo de las siguientes líneas:

 In [7]: d = dict((i,i+100) for i in xrange(10)) In [8]: d Out[8]: {0: 100, 1: 101, 2: 102, 3: 103, 4: 104, 5: 105, 6: 106, 7: 107, 8: 108, 9: 109} In [9]: exc = set((2, 5)) In [10]: for k, v in d.items(): ....: if k not in exc: ....: print v ....: ....: 100 101 103 104 106 107 108 109 

Además, como una lista de comprensión utilizando conjuntos:

 d = dict(zip(range(9),"abcdefghi")) blacklisted = [2,5] outputs = [d[k] for k in set(d.keys())-set(blacklisted)]