2012-01-03 17 views
18

Tengo un diccionario de Python. Solo para dar contexto, estoy tratando de escribir mi propia unidad de validación cruzada simple.Conservar todas las entradas excepto una clave python

Así que, básicamente, lo que quiero es obtener todos los valores a excepción de las claves dadas. Y dependiendo de la entrada, devuelve todos los valores de un diccionario, excepto 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?

Respuesta

24
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 código python válido.

también puede expresarse como una lista por comprensión:

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

Umm hi ... probablemente sea una pregunta tonta ... pero ¿cuál sería mi lista negra aquí? – Fraz

+0

[2, 5] en el ejemplo que ha proporcionado, es la lista de claves que desea excluir. –

1

¿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 
2

También, como una lista por comprensión utilizando conjuntos:

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

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 
    } 

a continuación el ejemplo de comprensión sencilla alcanzaría lo que posiblemente desee

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

este ejemplo se enumeran todos los valores no con teclas {2,5}

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

[5, 6, 1, 17, 9, 18, 1, 16, 17, 10] 
+0

+1, pero podría ser '[d [k] para k en d si k no está en (2,5)]' – dansalmo

6

Sólo por diversión con juegos

keys = set(dict.keys()) 
excludes = set([...]) 

for key in keys.difference(excludes): 
    print dict[key] 
+1

'[d [k] para k en conjunto (d.keys()) diferencia (conjunto (excluye))] 'no use' dict' como nombre. – dansalmo

3
keys = ['a', 'b'] 
a_dict = {'a':1, 'b':2, 'c':3, 'd':4} 
[a_dict.pop(key) for key in keys] 

Después de extraer las claves para descartar, a_dict retendrá las que está buscando.

Cuestiones relacionadas