リストのディクショナリがあり、デフォルトのキーで初期化する必要があります。おそらく、以下のコードは適切ではありません(つまり、動作しますが、Pythonのように記述されているとは思わない)。
d = {'a' : [], 'b' : [], 'c' : []}
だから私はdefaultict
のようなよりPythonicなものを使いたいです:
d = defaultdict(list)
ただし、私が見たすべてのチュートリアルは、新しいキーを動的に設定します。しかし、私の場合、すべてのキーは最初から定義する必要があります。他のデータ構造を解析していて、構造内の特定のキーがディクショナリにも含まれている場合にのみ、ディクショナリに値を追加します。
デフォルトのキーを設定するにはどうすればよいですか?
それはすでに合理的ですが、標準のキーのリストを使用するdict内包表記で少し短くすることができます。
>>> standard_keys = ['a', 'b', 'c']
>>> d1 = {key:[] for key in standard_keys}
>>> d2 = {key:[] for key in standard_keys}
>>> ...
近いキーセット(例では['a'、 'b'、 'c'])を使用していることがわかっている場合は、上記の答えを間違いなく使用できます。
だが...
dd = defaultdict(list)
はさらに多くの機能を提供します:d = {'a':[], 'b':[], 'c':[]}
。 append
からdefaultdict
の「存在しない」キーまで:
>>dd['d'].append(5)
>>dd
>>defaultdict(list, {'d': 5})
ここであなたがする場合:
>>d['d'].append(5) # you'll face KeyError
>>KeyError: 'd'
次のようなことをお勧めします:
>>d = {'a' : [], 'b' : [], 'c' : []}
>>default_d = defaultdict(list, **d)
これで、3つのキーを保持する辞書があります:['a'、 'b'、 'c']および値としての空のリストand明示的に記述せずに他のキーに追加することもできます:d['new_key'] = []
追加する前
空のリストに事前初期化する場合は、defaultdictは必要ありません。シンプルなdict-comprehensionは仕事を明確にそしてきれいに行います:
>>> {k : [] for k in ['a', 'b', 'c']}
{'a': [], 'b': [], 'c': []}
コメントから、私はあなたが次の条件に合う辞書が欲しいと思っています:
@Aaron_labには正しい方法がありますが、少しすっきりした方法があります。
d = defaultdict(list,{ k:[] for k in ('a','b','c') })
プリセットキーを使用してdict
を返す関数を定義できます。
_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
_
[8]:get_preset_dict()
Out [8]:_
{'a': [], 'b': [], 'c': []}
_[18]で:get_preset_dict(keys = ['a'、 'e'、 'i'、 'o'、 'u'])
Out [18]:_
{'a': [], 'e': [], 'i': [], 'o': [], 'u': []}
_[19]内:
get_preset_dict(keys=['a','e','i','o','u'],values=[[1],[2,2,2],[3],[4,2],[5]])
Out [19]:_
{'a': [1], 'e': [2, 2, 2], 'i': [3], 'o': [4, 2], 'u': [5]}
_