2016-04-29 17 views
3

defaultdictを作成する必要があります。値の型は通常のPythonの文字列です。下のメソッドが機能しないようですか?ポストコンパイルエラーメッセージ。 Python 2.7を使用し、どのように良いアイデアを修正するのだろうか?ありがとう。値の型として文字列を持つPythonのdefaultdict

コード

import collections 

a = collections.defaultdict("") 

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

print a 

エラーメッセージ

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

'collections.defaultdict(文字列)' – Delgan

+0

@Delgan、素敵! "文字列"を試してみましたが、短い省略記号 "str"を使用することはありません。 :) あなたが返信を追加することができれば、私はそれを他の人に利益をもたらす答えとしてマークします。ありがとう。 –

+1

これは 'str'は[組み込み関数](https://docs.python.org/2/library/functions.html#str)ですが、' string'はPythonには存在しないためです。すでに投稿されている回答の1つを受け入れることができます。 – Delgan

答えて

7

エラーが示すように、最初の引数は、必要な値を生成する呼び出し可能でなければなりません。 str使用します

a = collections.defaultdict(str) 

必要であれば、あなたはlambda機能付きラッパーを作成することができます

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

ありがとうございます。 –

+0

すべてのTigerhawkT3のおかげで、あなたの返信に答えを記入してください。 –

2

それはそうです。文字列を返すものではなく、文字列のインスタンスがあります。あなたが欲しいのはcollections.defaultdict(str)です。これは、str()""を返すためです。あなたはタイプがこのようなものだったのかを発見した可能性:

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

または

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

したがって、あなたはクラスの名前を知らなかった場合、あなたはこれを行っている可能性

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

ありがとうございます。 –

関連する問題