2015-07-15 14 views
5

Ich möchte eine Funktion erstellen, die eine Kopie eines Wörterbuchs ohne die in einer Liste angegebenen Schlüssel zurückgibt.Rückkopie des Wörterbuchs mit Ausnahme der angegebenen Schlüssel

dieses Wörterbuch Betrachtet:

my_dict = { 
    "keyA": 1, 
    "keyB": 2, 
    "keyC": 3 
} 

Ein Aufruf without_keys(my_dict, ['keyB', 'keyC']) zurückkehren soll:

{ 
    "keyA": 1 
} 

Ich möchte dies mit einem ordentlichen Wörterbuch Verständnis in einem einzeiligen tun, aber ich habe Ärger. Mein Versuch ist dies:

def without_keys(d, keys): 
    return {k: d[f] if k not in keys for f in d} 

die ungültige Syntax ist. Wie kann ich das machen?

Antwort

8

Sie nah waren, versuchen Sie das folgende Snippet:

>>> my_dict = { 
...  "keyA": 1, 
...  "keyB": 2, 
...  "keyC": 3 
... } 
>>> invalid = {"keyA", "keyB"} 
>>> def without_keys(d, keys): 
...  return {x: d[x] for x in d if x not in keys} 
>>> without_keys(my_dict, invalid) 
{'keyC': 3} 

Grundsätzlich ist die if k not in keys am Ende des dict Verständnis im obigen Fall gehen.

3

Dies sollte für Sie arbeiten.

def without_keys(d, keys): 
    return {k: v for k, v in d.items() if k not in keys} 
3

In Ihrem Wörterbuch Verständnis sollten Sie über Ihren Wörterbuch werden Iterieren (nicht k, nicht sicher, was das ist entweder). Beispiel -

return {k:v for k,v in d.items() if k not in keys} 
0

Für diejenigen, die nicht Listenkomprehensionen mögen, das ist meine Version:

def without_keys(d, *keys): 
    dict(filter(lambda key_value: key_value[0] not in keys, d.items())) 

Verbrauch:

>>> d={1:3, 5:7, 9:11, 13:15} 
>>> without_keys(d, 1, 5, 9) 
{13: 15} 
>>> without_keys(d, 13) 
{1: 3, 5: 7, 9: 11} 
>>> without_keys(d, *[5, 7]) 
{1: 3, 13: 15, 9: 11} 
Verwandte Themen