2012-01-03 11 views
18

Ho un dizionario Python. Solo per dare un contesto, sto cercando di scrivere la mia semplice unità di convalida incrociata.Conserva tutte le voci tranne una chiave python

Quindi in pratica quello che voglio è ottenere tutti i valori tranne le chiavi specificate. E a seconda dell'input, restituisce tutti i valori da un dizionario tranne quelli che sono stati dati.

Quindi se l'ingresso è 2 e 5, i valori di uscita non hanno i valori dei tasti 2 e 5?

risposta

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

la bellezza è che questo esempio di pseudocodice è un codice Python valido.

può anche essere espresso come una lista di comprensione:

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

Umm ciao .. probabilmente una domanda stupida .. ma quale sarebbe il mio set di liste nere qui? – Fraz

+0

[2, 5] nell'esempio che hai fornito, è l'elenco di chiavi che vuoi escludere. –

1

ne dite qualcosa lungo le seguenti linee:

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

Inoltre, come una lista di comprensione utilizzando insiemi:

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

Dato un dizionario dire

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

poi il semplice esempio di comprensione potrebbe raggiungere ciò che si desidera eventualmente

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

questo esempio vengono elencati tutti i valori non con tasti {2,5}

ad esempio, la O/P della comprensione sopra è

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

+1, ma potrebbe essere '[d [k] per k in d se k non in (2,5)]' – dansalmo

6

Solo per divertimento con i set

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

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

'[d [k] per k in set (d.keys()). Difference (set (esclude))] 'non usare' dict' come nome. – dansalmo

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

Dopo aver estratto i tasti da scartare, a_dict manterrà quelli che stai cercando.

Problemi correlati