2010-10-17 15 views
41

Mam słownika:uzyskać podzbiór słownika Pythona

{'key1':1, 'key2':2, 'key3':3} 

muszę przechodzić podzbiór tego słownika do kodu strony trzeciej. Chce tylko słownika zawierającego klucze ['key1', 'key2', 'key99'] i jeśli otrzyma inny klucz (np. 'key3'), wybucha w paskudnym bałaganie. Kod, o którym mowa, jest poza moją kontrolą, więc pozostaję w pozycji, w której muszę wyczyścić słownik.

Jaki jest najlepszy sposób na ograniczenie słownika do zestawu kluczy?

Biorąc słownika przykładowy i pozostawiono klucze powyżej, chcę:

{'key1':1, 'key2':2} 

Odpowiedz

47
In [38]: adict={'key1':1, 'key2':2, 'key3':3} 
In [41]: dict((k,adict[k]) for k in ('key1','key2','key99') if k in adict) 
Out[41]: {'key1': 1, 'key2': 2} 

W Python3 (lub Python2.7 lub nowszej) można zrobić z dict-comprehension TOO:

>>> {k:adict[k] for k in ('key1','key2','key99') if k in adict} 
{'key2': 2, 'key1': 1} 
+7

Zrozumienie Dicta jest również w Pythonie 2.7. –

+0

Szkoda, że ​​nie było dla tego operatora. Podobnie jak 'adict - {'key1'} == {'key2': 2, 'key3': 3}' – wim

+0

Wydaje się, że nie ma sensownego odwrotu od metody 'dict.update' – wim

19
dict(filter(lambda i:i[0] in validkeys, d.iteritems())) 
+0

Uwielbiam proste i słodkie wdrożenie. –

+2

Dla Pythona 3, powinno to być 'd.items()'. – refi64

Powiązane problemy