2012-01-03 9 views
18

Mam słownik python. Wystarczy podać kontekst, próbuję napisać własną prostą jednostkę do sprawdzania poprawności krzyżowej.Zachowaj wszystkie wpisy poza jednym pytonem klucza

Więc w zasadzie chcę uzyskać wszystkie wartości z wyjątkiem podanych kluczy. W zależności od danych wejściowych zwraca wszystkie wartości ze słownika, z wyjątkiem tych, które zostały podane.

Więc jeśli wejście ma wartość 2 i 5, wartości wyjściowe nie mają wartości z klawiszy 2 i 5?

Odpowiedz

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

piękna jest to, że ten przykład pseudokod jest prawidłowym kodem Pythona.

może być również wyrażony jako listowego:

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

Umm hi .. prawdopodobnie głupie pytanie .. ale jaki byłby mój zestaw na czarnej liście tutaj? – Fraz

+0

[2, 5] w podanym przykładzie, jest to lista kluczy, które chcesz wykluczyć. –

1

Jak o czymś wzdłuż następujących linii:

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

także jako lista pojmowania wykorzystujące zestawach:

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

Podany słownik:

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

to prosty przykład zrozumienie osiągnęłaby co ewentualnie pragnąć

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

Przykład ten zawiera wszystkie wartości nie z klawiszy {2,5}

na przykład O/P powyższego rozumienia jest

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

+1, ale może być '[d [k] dla k in d jeśli k nie jest (2,5)]' – dansalmo

6

Tak dla zabawy z zestawów

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

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

'[d [k] dla k w zestawie (d.keys()). (wyklucza))] 'nie używaj' dict' jako nazwy. – dansalmo

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

Po wyskoczeniu kluczy do usunięcia, a_dict zachowa te, których szukasz.

Powiązane problemy