将字典项初始化为defaultdict(列表)

时间:2017-09-12 08:28:52

标签: python dictionary defaultdict

我试图简化此代码:

final_data_row = dict()
final_data_row['param1'] = []
final_data_row['param2'] = []
final_data_row['param3'] = []
final_data_row['param4'] = []

这样的事情:

from collections import defaultdict

final_data_row = dict()
for param in ['param1', 'param2', 'param3', 'param4']:
    final_data_row[param] = defaultdict(list)

但是当我想在其中一个字典项中添加内容时,就像这样:

final_data_row['param1'].append('test value')

它给了我一个错误:

AttributeError: 'collections.defaultdict' object has no attribute 'append'

1 个答案:

答案 0 :(得分:2)

两个片段都不相同:第一个片段创建4个条目作为列表,第二个片段创建4个条目defaultdict s。因此,密钥的每个值现在都是defaultdict,无法使用append

取决于您想要做什么:

仅定义那4个键:不需要defaultdict

final_data_row = dict()
for param in ['param1', 'param2', 'param3', 'param4']:
    final_data_row[param] = []

或dict comprehension:

final_data_row = {k:[] for k in ['param1', 'param2', 'param3', 'param4']}

如果你想要一个完整的defaultdict:一行:

final_data_row = defaultdict(list)

(您可以添加任意数量的键,而不是固定到param[1234]