![](/img/trans.png)
[英]Initialize non existing keys in OrderedDict with default values like defaultDict
[英]How to initialize defaultdict with keys?
我有一個列表字典,它應該用默認密鑰初始化。 我猜,下面的代碼不好(我的意思是,它有效,但我覺得它不是用pythonic方式編寫的):
d = {'a' : [], 'b' : [], 'c' : []}
所以我想使用像ictict更像defaultict
東西:
d = defaultdict(list)
但是,我見過的每個教程都會動態設置新密鑰。 但在我的情況下,所有的鍵都應該從一開始就定義。 我正在解析其他數據結構,只有當結構中的特定鍵也包含在我的字典中時,才會向我的字典添加值。
如何設置默認密鑰?
這已經是合理的,但你可以通過使用標准鍵列表的字典理解來縮短一點。
>>> 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':[]}
。 您可以在defaultdict
append
“not existing”鍵:
>>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”]和空列表作為值, 並且還可以追加到其他按鍵不明確寫着: d['new_key'] = []
在追加之前
如果您要預先初始化為空列表,則不需要defaultdict 。 簡單的字典理解能夠清晰,干凈地完成工作:
>>> {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]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.