2016-04-29 8 views
3

Müssen ein Standarddict erstellen, Werttyp ist normal Python-String, es scheint, meine unten Methode funktioniert nicht? Fehler beim Kompilieren der Nachricht. Verwenden von Python 2.7 und Fragen über gute Ideen, wie zu beheben? Vielen Dank.Python defaultdict mit string als Werttyp

-Code

import collections 

a = collections.defaultdict("") 

a[1]="Hello" 
a[2]="World" 

print a 

Fehlermeldung

a = collections.defaultdict("") 
TypeError: first argument must be callable 
+3

'collections.defaultdict (str)' – Delgan

+0

@Delgan, nice! Versuchte "Schnur" funktioniert nicht, und nie über kürzere Abkürzung "str". :) Wenn Sie eine Antwort hinzufügen könnten, werde ich es als Antwort markieren, um andere Menschen zu profitieren. Vielen Dank. –

+1

Dies liegt daran, dass 'str' eine [eingebaute Funktion] ist (https://docs.python.org/2/library/functions.html#str), aber' string' in Python nicht existiert. Sie können eine der bereits geposteten Antworten akzeptieren. – Delgan

Antwort

7

Wie der Fehler sagt, muss das erste Argument eine Callable sein, die den gewünschten Wert erzeugt. Verwenden Sie str:

a = collections.defaultdict(str) 

Bei Bedarf können Sie einen Wrapper mit einer lambda Funktion erstellen:

a = collections.defaultdict(lambda: 'initial') 
+0

Danke, stimmt auf. –

+0

Vielen Dank für die Hilfe TigerhawkT3, markieren Sie Ihre Antwort als Antwort. –

2

Es ist richtig. Sie haben eine Instanz einer Zeichenfolge anstelle von etwas, das eine Zeichenfolge zurückgibt. Was Sie wollen, ist collections.defaultdict(str). Das liegt daran, dass str()"" zurückgibt. Sie hätten herausgefunden, was die Art, wie das war:

a = collections.defaultdict(type("")) 

oder

:

>>> type("") 
<class 'str'> 

Deshalb, wenn Sie nicht den Namen der Klasse wissen, könnten Sie dies getan haben,

a = collections.defaultdict("".__class__) 
+0

Danke, stimmt auf. –

Verwandte Themen