2016-08-01 7 views
-2

ich ein Wörterbuch enthält defaultdicts aufzubauen versuche:Python Dictionary of DefaultDicts

from collections import defaultdict 

my_dict = { 
'first_key':defaultdict(list) 
} 

my_dict['first_key'].extend('add this to list') 

... aber das zurückgibt: AttributeError: 'collections.defaultdict' object has no attribute 'extend'

Verbesserungsvorschläge? Vielen Dank.

+1

Sooo ... Das ist es: Sie können nicht '' extend' DefaultDict's. .. – ForceBru

+2

Vielleicht willst du einfach 'my_dict = defaultdict (list)'? –

+0

ändern Sie einfach zu my_dict = defaultdict (Liste), wenn Sie die Liste nach nicht festgelegten Schlüssel verwenden möchten. –

Antwort

2

Korrigieren Sie mich, wenn ich falsch liege, aber ich glaube nicht, dass Sie ein Wörterbuch von defaultdicts dafür wollen. Was Sie versuchen, die eingebaute in dict Methode leicht zu tun, wird dadurch erreicht, setdefault:

>>> my_dict = {} 
>>> my_dict.setdefault('numbers', []).extend([1, 2, 3]) 
>>> my_dict 
{u'numbers': [1, 2, 3]} 
>>> my_dict.setdefault('numbers', []).append(4) 
>>> my_dict 
{u'numbers': [1, 2, 3, 4]} 

setdefault nimmt einen (möglicherweise fehlt) Schlüssel und einen Standard es zu initialisieren, wenn es ist fehlt. Wenn der Schlüssel bereits vorhanden ist, wird er einfach zurückgegeben.

Wie John Kugelman in den Kommentaren weist darauf hin, kann dies auch defaultdict in gewohnter Weise unter Verwendung erreicht werden:

>>> from collections import defaultdict 
>>> my_dict = defaultdict(list) 
>>> my_dict 
defaultdict(<type 'list'>, {}) 
>>> my_dict['numbers'].extend([1, 2, 3]) 
>>> my_dict 
defaultdict(<type 'list'>, {u'numbers': [1, 2, 3]}) 
>>> my_dict['numbers'].append(4) 
>>> my_dict 
defaultdict(<type 'list'>, {u'numbers': [1, 2, 3, 4]}) 
+0

Warum denkst du, dass OP nicht 'defaultdict' verwenden will, sondern' setdefault'? –

+0

Vielen Dank für die klare Erklärung :) –

+0

@tobias_k: Typo. Gemeint ist das "Dictionary of Defaultdicts", das es jetzt sagt. Diese Antwort ging etwas von meiner ursprünglichen Intention zurück, da gute Kommentare über noch zu schreibende Teile während meiner FGITW-Bearbeitung auftauchten. –

Verwandte Themen