简体   繁体   English

初始化字典项为defaultdict(list)

[英]Initialize dictionary items as defaultdict(list)

I'm trying to simplify this code: 我正在尝试简化此代码:

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

into something like this: 变成这样的东西:

from collections import defaultdict

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

but when I wanted to add something to one of the dictionary items, like so: 但是当我想向其中一个字典项添加内容时,如下所示:

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

it gives me an error: 它给我一个错误:

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

Both snippets aren't equivalent: the first one creates 4 entries as lists, the second one creates 4 entries as defaultdict s. 这两个片段不相等:第一个片段创建4个条目作为列表,第二个片段创建4个条目作为defaultdict So each value of the key is now a defaultdict , can't use append on that. 因此,密钥的每个值现在都是defaultdict ,不能在其上使用append

Depending on what you want to do: 根据您要执行的操作:

Define only those 4 keys: No need for defaultdict 只定义这四个键:不需要defaultdict

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

or with dict comprehension: 或dict理解:

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

If you want a full defaultdict : one line: 如果要完整的defaultdict :一行:

final_data_row = defaultdict(list)

(you can add as many keys you want, not fixed to param[1234] keys (您可以添加任意数量的键,而不是固定于param[1234]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM