2017-03-21 5 views
3

私はリストの辞書を持っており、それはデフォルトキーで初期化する必要があります。私は推測し、以下のコードは良くありません(それは動作しますが、私は意味、私はそれは神託のように書かれていることを感じていない):キーでdefaultdictを初期化する方法は?

d = {'a' : [], 'b' : [], 'c' : []} 

だから私はdefaultictようなより多くの神託なものを使用します:

d = defaultdict(list) 

しかし、私が見たチュートリアルではすべて、新しいキーが設定されています。しかし、私の場合、すべてのキーは最初から定義する必要があります。私は他のデータ構造を解析していますが、構造内の特定のキーにも辞書に含まれている場合にのみ、辞書に値を追加します。

どのようにデフォルトキーを設定できますか?

+0

あなたは追加のキーが後で自動的に作成したいですかあなたは最初からフルセットを持っていますか? – tdelaney

+2

defaultdictを使用している場合、なぜキーを設定する必要がありますか?あなたが望むふるまいは何ですか、このデータ構造のユースケースは何ですか? – jonrsharpe

+0

@tdelaney最初からフルセットが欲しいです。 – Amir

答えて

4

これはすでに合理的ですが、標準的なキーのリストを使用する辞書の理解で少し上げることができます。あなたは空のリストに事前に初期化するつもりなら

>>> standard_keys = ['a', 'b', 'c'] 
>>> d1 = {key:[] for key in standard_keys} 
>>> d2 = {key:[] for key in standard_keys} 
>>> ... 
1

は、defaultdictのための必要はありません。

>>> {k : [] for k in ['a', 'b', 'c']} 
{'a': [], 'b': [], 'c': []} 
1

あなたはプリセットキーで、あなたにdictを返される定義された機能を持つことができますシンプルなのdict-理解を明確にし、きれいに仕事を取得します。 get_preset_dict()

OUT [8] [18]において{'a': [], 'b': [], 'c': []}

を:get_preset_dict(キー= [ 'A'、 'E'、」[8]において

def get_preset_dict(keys=['a','b','c'],values=None): 
    d = {} 
    if not values: 
     values = [[]]*len(keys) 
    if len(keys)!=len(values): 
     raise Exception('unequal lenghts') 
    for index,key in enumerate(keys): 
     d[key] = values[index] 

    return d 

私は」、 'O'、 'U'])

OUT [18]: get_preset_dict(keys=['a','e','i','o','u'],values=[[1],[2,2,2],[3],[4,2],[5]]):[19]において{'a': [], 'e': [], 'i': [], 'o': [], 'u': []}

アウト[19]:{'a': [1], 'e': [2, 2, 2], 'i': [3], 'o': [4, 2], 'u': [5]}

関連する問題