2016-05-02 11 views
0

辞書のデフォルト辞書を作成するコードを記述しようとしています。しかし、私はそのようなことをどのように初期化/作成するのか分かりません。辞書のデフォルト辞書を作成するにはどうすればいいですか

from collections import defaultdict 
inner_dict = {} 
dict_of_dicts = defaultdict(inner_dict(int)) 

辞書のこのデフォルトの辞書の使用は私が開いたファイルから生成した単語の各ペアのためにある(例えば、[[「M UH M」、「M:私の現在の試みは、次のようになります空のスペースで区切られた最初の単語の各セグメントを外側の辞書のキーとして設定し、次に空のスペースで区切られた2番目の単語の各セグメントに対してそのセグメントの頻度を設定します。ちょうどこのような何かが実際に辞書のデフォルトの辞書を生成するかどうかしかし、私はちょうど思っていた、今では出力にすべてのエラーを持っていないようにこれを実行して持っ例えば

[['M UH M', 'm oo m']] 
(<class 'dict'>, {'M': {'m': 2}, 'UH': {'oo': 1}}) 

これが重複しているとお詫び申し上げますが、これらの質問に対するこれまでの回答は混乱しており、別の状況でありました。

d = defaultdict(dict) 

をこの特定の問題については、collections.Counterがより適切であろう

>>> from collections import defaultdict, Counter 
>>> d = defaultdict(Counter) 
>>> for a, b in zip(*[x.split() for x in ['M UH M', 'm oo m']]): 
... d[a][b] += 1 
>>> print(d) 
defaultdict(collections.Counter, 
      {'M': Counter({'m': 2}), 'UH': Counter({'oo': 1})}) 

編集を:

+0

あなたの現在のコードは無効です... 'inner_dict'は辞書であると定義されていて、それを' inner_dict(int) 'として呼び出そうとします... – donkopotamus

答えて

0

は、あなたが使用するデフォルト値として辞書を作成 defaultdictを初期化するには

012なしで同等品に関するコメントに興味を表明した。ここでは、また、使用、通常の辞書とそのsetdefault方法でし平野dict

>>> from collections import defaultdict 
>>> d = defaultdict(dict) 
>>> for a, b in zip(*[x.split() for x in ['M UH M', 'm oo m']]): 
... d[a][b] = d[a].get(b, 0) + 1 
>>> print(d) 
defaultdict(dict, {'M': {'m': 2}, 'UH': {'oo': 1}}) 
+0

これはエレガントな方法です!カウンターを使わずにこれを行う方法はありますか?代わりにデフォルトの辞書と辞書だけ? –

+0

@IndifferentPotato私は 'defaultdict(dict)'を使って同等のものを追加しました – donkopotamus

+0

普通の** dict **と同等のものはAttributeErrorを出力します: 'list'オブジェクトには属性 'split'はありません。 :/ –

0

を使用して同等です。

my_dict.setdefault(key, default)は... ...

  • キーがすでに存在する場合、それを修正することなく、現在の値を返す、または... my_dict[key]と...

    • を検索デフォルト値を割り当てます(my_dict[key] = default)、それを返します。あなたはどちらか、このキーが割り当てられ、実際の値を取得する代わりに、通常のmy_dict[key]のあなたの外側の辞書から値を取得したいとき、それは#sの存在、または新しい空を取得する場合

    だから、常にmy_dict.setdefault(key, {})を呼び出すことができます辞書をデフォルト値として使用して、自動的に外部辞書にも格納されます。

    例:あなたは常に有効inner_dictを取得

    outer_dict = {"M": {"m": 2}} 
    
    inner_dict = d.setdefault("UH", {}) 
    # outer_dict = {"M": {"m": 2}, "UH": {}} 
    # inner_dict = {} 
    inner_dict["oo"] = 1 
    # outer_dict = {"M": {"m": 2}, "UH": {"oo": 1}} 
    # inner_dict = {"oo": 1} 
    
    inner_dict = d.setdefault("UH", {}) 
    # outer_dict = {"M": {"m": 2}, "UH": {"oo": 1}} 
    # inner_dict = {"oo": 1} 
    inner_dict["xy"] = 3 
    # outer_dict = {"M": {"m": 2}, "UH": {"oo": 1, "xy": 3}} 
    # inner_dict = {"oo": 1, "xy": 3} 
    

    この方法では、いずれかの空のデフォルト一つまたはすでに指定されたキーの存在です1。辞書は変更可能なデータ型であるため、返されたinner_dictを変更すると、outer_dict内の辞書も変更されます。

  • 関連する問題