【问题标题】:Defaultdict with values defaulted to negative infinityDefaultdict 的值默认为负无穷大
【发布时间】:2015-07-06 05:59:44
【问题描述】:

我想创建一个默认值是负无穷大的默认字典。我尝试做defaultdict(float("-inf")),但它不起作用。我该怎么做?

【问题讨论】:

  • 注意defaultdict的参数应该是callable;例如,defaultdict(lambda: float('-inf')) 会起作用。参见例如stackoverflow.com/q/5029934/3001761(不是精确地重复,而是相同的潜在问题)。
  • @jonrsharpe 那是答案而不是评论:P
  • @JoranBeasley 我正在寻找一个骗子,但我找不到一个真正好的...

标签: python defaultdict


【解决方案1】:

正如回溯具体告诉您

>>> from collections import defaultdict
>>> dct = defaultdict(float('-inf'))

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    dct = defaultdict(float('-inf'))
TypeError: first argument must be callable

per the documentation(强调我的):

如果default_factory [defaultdict 的第一个参数] 不是None,则不带参数调用 为给定键提供默认值,该值插入到键的字典,并返回。

float('-inf')不可可调用的。相反,您可以这样做:

dct = defaultdict(lambda: float('-inf'))

提供返回默认值的可调用"lambda expression"。出于同样的原因,您会看到代码,例如defaultdict(int) 而不是 defaultdict(0):

>>> int()  # callable
0  # returns the desired default value

您也会遇到类似的问题,例如试图将defaultdicts 相互嵌套(参见Python: defaultdict of defaultdict?)。

【讨论】:

  • 感谢工作。我很困惑,因为在将默认设置为 int 时我不需要这样做。
  • @accelke 否,因为int 是可调用的,并返回要使用的默认值;我已经在我的回答中包含了这个例子。
  • 谢谢,这个建议帮助我创建了一个默认值为 [0,0] 的字典:presults=defaultdict(lambda:[0,0])
猜你喜欢
  • 2021-11-02
  • 1970-01-01
  • 2015-08-02
  • 2017-03-06
  • 2013-11-29
  • 1970-01-01
  • 2016-08-13
  • 2012-02-09
  • 1970-01-01
相关资源
最近更新 更多