我有一个列表字典,应该用默认密钥初始化。我猜,下面的代码不好(我的意思是,它有效,但我觉得它不是用pythonic方式编写的):
d = {'a' : [], 'b' : [], 'c' : []}
所以我想使用像defaultict
这样的pythonic:
d = defaultdict(list)
但是,我见过的每个教程都会动态设置新密钥。但在我的情况下,所有的键都应该从一开始就定义。我正在解析其他数据结构,只有当结构中的特定键也包含在我的字典中时,才会向我的字典添加值。
如何设置默认密钥?
答案 0 :(得分:5)
这已经很合理,但你可以使用标准的键列表来缩短它。
>>> standard_keys = ['a', 'b', 'c']
>>> d1 = {key:[] for key in standard_keys}
>>> d2 = {key:[] for key in standard_keys}
>>> ...
答案 1 :(得分:3)
如果您有一组密切的关键字([' 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)
现在你有一个dict按住你的3个键:[' a',' b'' c']和空列表作为值,并且您还可以在附加
之前附加到其他键而无需明确写入:d['new_key'] = []
答案 2 :(得分:2)
如果您要预先初始化为空列表,则不需要 defaultdict 。简单的字典理解能够清晰,干净地完成工作:
>>> {k : [] for k in ['a', 'b', 'c']}
{'a': [], 'b': [], 'c': []}
答案 3 :(得分:2)
根据评论,我假设您想要一本符合以下条件的字典:
@Aaron_lab有正确的方法,但是有一种更简洁的方法:
d = defaultdict(list,{ k:[] for k in ('a','b','c') })
答案 4 :(得分:1)
您可以定义一个函数,它会返回一个带预设键的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',& #39; U'])
出[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]])
出[19]:
{'a': [1], 'e': [2, 2, 2], 'i': [3], 'o': [4, 2], 'u': [5]}