Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建默认值为零(0)的defaultdict_Python_Python 2.7 - Fatal编程技术网

Python 创建默认值为零(0)的defaultdict

Python 创建默认值为零(0)的defaultdict,python,python-2.7,Python,Python 2.7,与之类似,我想创建一个默认值为零的collections.defaultdict,用于计算元组列表中的元素: tuples = [('foo', 5), ('foo', 5), ('bar', -5), ('bar', -2)] totals = defaultdict(0) for t in tuples: totals[t[0]] += t[1] 但是defaultdict(0)说: TypeError: first argument must be callable 我应该如何

与之类似,我想创建一个默认值为零的
collections.defaultdict
,用于计算元组列表中的元素:

tuples = [('foo', 5), ('foo', 5), ('bar', -5), ('bar', -2)]
totals = defaultdict(0)
for t in tuples:
    totals[t[0]] += t[1]
但是
defaultdict(0)
说:

TypeError: first argument must be callable

我应该如何创建一个“可调用”零?

集合的docstring。defaultdict一开始读起来非常混乱:

defaultdict(默认工厂[,…])-->带默认工厂的dict

在不带参数的情况下调用默认工厂以生成新值 当键不存在时,仅在getitem中。默认的dict比较 等同于具有相同项的dict。所有剩余的参数都是 处理方式与传递给dict构造函数的方式相同, 包括关键字参数

所有这一切都是为了说明默认的“值”必须是一个函数,并且在需要时(即,当正常的
dict
将引发
KeyError
时),该函数将被调用而不带参数。docstring将该函数称为
default\u factory

带有
[,…]
的位表示您可以选择传入一个对象(或关键字)作为
defaultdict
的初始字典。因此:

In [26]: x = defaultdict(lambda: 0, a=1, b=2)

In [28]: dict(x)
Out[28]: {'a': 1, 'b': 2}

In [29]: x['c'] # This would normally raise a `KeyError`
Out[29]: 0

In [30]: dict(x) # But here it just adds a new key!
Out[30]: {'a': 1, 'b': 2, 'c': 0}
可以使用在无参数调用时返回零的任何函数:

In [31]: int()
Out[31]: 0
因此,根据,您可以创建一个默认值为零的
defaultdict

defaultdict(int)

另外,请注意,除了这里涉及的许多其他问题外,
defaultdict(int)
示例在中给出,因此我真的不确定这是否增加了价值。@jonrsharpe文档中提到的这一点比您链接到的重复问题更有力,尽管这是一个超集,不太容易上钩。我有一种倾向,每当文档串是不透明的,快速的谷歌不会立刻带来快乐时,我就会提出这些问答式的问题!