2010-10-17 26 views
41

Ho un dizionario:Ottenere un sottoinsieme di un dizionario Python

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

ho bisogno di passare un sottoinsieme di quella dizionario di codice di terze parti. Vuole solo un dizionario contenente le chiavi ['key1', 'key2', 'key99'] e se ottiene un'altra chiave (es. 'key3'), esplode in un pasticcio. Il codice in questione è fuori dal mio controllo, quindi sono lasciato in una posizione in cui devo pulire il mio dizionario.

Qual è il modo migliore per limitare un dizionario a un set di chiavi?

Data la dizionario esempio e permessi chiavi sopra, voglio:

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

risposta

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} 

In python3 (o Python2.7 o successivo) è possibile farlo con un dict-comprehension troppo:

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

Le comprensioni Dict sono anche in Python 2.7. –

+0

Vorrei che ci fosse un operatore per questo. Come 'adict - {'key1'} == {'key2': 2, 'key3': 3}' – wim

+0

Non sembra esserci alcun senso inverso del metodo 'dict.update' – wim

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

Ho amato l'implementazione semplice e dolce. –

+2

Per python 3, dovrebbe essere 'd.items()'. – refi64

Problemi correlati