我运行了以下代码:
from collections import defaultdict
lst = list(range(0,5))
d = defaultdict(lst)
我得到了这个错误:
TypeError: first argument must be callable or None
请帮忙
原文由 Arcyno 发布,翻译遵循 CC BY-SA 4.0 许可协议
我运行了以下代码:
from collections import defaultdict
lst = list(range(0,5))
d = defaultdict(lst)
我得到了这个错误:
TypeError: first argument must be callable or None
请帮忙
原文由 Arcyno 发布,翻译遵循 CC BY-SA 4.0 许可协议
您应该使参数可调用,例如,使用 lambda
:
from collections import defaultdict
d = defaultdict(lambda: list(range(0,5)))
print(d[0])
# [0, 1, 2, 3, 4]
原文由 Moses Koledoye 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
对于
defaultdict
默认值 通常 不是真正的值,它是一个 工厂:一种生成新值的方法。您可以使用生成列表的 lambda 表达式 来解决此问题:这在这里也是一个好主意,因为否则 所有默认值 都会 引用相同的 list 。例如这里:
不会 对
d[2]
产生影响(假定d[1]
和d[2]
都不存在)。但是,您可以通过以下方式实现此目的:
But this can have unwanted side effects: if you here perform
d[1].append(14)
thend[2]
will be[1,2,3,4,5,14]
andd[1] is d[2]
will beTrue
:然而: