2016-06-15 15 views
0

私は、キー値に基づいてdefaultdict内にdefaultdictを作成しようとしています。私の考えはここでは完全に間違っているかもしれませんが、ここでは基本的なデフォルトのコードです。辞書内のキーに基づいてネストされたdefaultdict

def record(): 
    return { 
     'count': 0, 
     'key1': Counter(),  
    } 

1_record = defaultdict(record) 

しかし、このようにキーをdefaultdictとして追加する場合はどうすればよいですか。

def record(): 
    return { 
     'count': 0, 
     'key1': Counter(), 
     'key2': { 
      'count': 0, 
      'nested_key1': Counter() 

    } 
} 

上記のように、私は 'key2'をdefaultdictにすることができますか?これも可能ですか、あるいは私は問題に間違った方法で近づいていますか?

+1

'()'のない 'defaultdict(record)'でなければなりませんか? –

+0

yup、申し訳ありません編集したタイプの入力 – user1165419

答えて

0

あなたは間違いなく、「再帰的」defaultdict持つことができます。さまざまなレベルでのキーの名前をスワップアウトすることは、おそらくいくつかの特別なケースを必要とし、コードがもう少し厄介になるだろう、しかし

>>> from collections import defaultdict 
>>> def record(): 
... return { 
...  'key': defaultdict(record) 
... } 
... 
>>> d = defaultdict(record) 
>>> 
>>> d['foo'] 
{'key': defaultdict(<function record at 0x10b396f50>, {})} 
>>> d['foo']['key']['bar'] 
{'key': defaultdict(<function record at 0x10b396f50>, {})} 
>>> d 
defaultdict(<function record at 0x10b396f50>, {'foo': {'key': defaultdict(<function record at 0x10b396f50>, {'bar': {'key': defaultdict(<function record at 0x10b396f50>, {})}})}}) 

を。 ..

+0

ちょっとmgilson、私の編集をチェックできますか?私は再帰的なdictを試みたが、それは私にエラーを与えた、あなたは私のコード/アプローチで何か間違って見えるか? – user1165419

+0

気にしないで、分かりました。ありがとう!! – user1165419

+0

dict_record ['hello'] ['key2'] 'は' 'defaultdict(second_record)' 'だから' dict_record ['hello'] ['key2 '] [' another_hello '] 'は' second_record'( 'dict')からの戻り値で' dict'に '1'を加えることはできません。 – mgilson

関連する問題