【问题标题】:Initialize dictionary items as defaultdict(list)将字典项初始化为 defaultdict(list)
【发布时间】:2017-09-12 16:31:36
【问题描述】:

我正在尝试简化这段代码:

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'

【问题讨论】:

  • 只做final_data_row = defaultdict(list)

标签: python dictionary defaultdict


【解决方案1】:

两个 sn-ps 不等效:第一个创建 4 个条目作为列表,第二个创建 4 个条目作为 defaultdicts。所以键的每个值现在都是defaultdict,不能在上面使用append

取决于你想做什么:

只定义这 4 个键:不需要defaultdict

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

或使用字典理解:

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

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

final_data_row = defaultdict(list)

(你可以添加任意数量的键,不固定为param[1234]

【讨论】:

  • 发布后马上就想出了这个! ;) 感谢您的帮助!
猜你喜欢
  • 2019-06-12
  • 2022-01-20
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 2021-04-05
  • 1970-01-01
  • 2012-04-27
相关资源
最近更新 更多