在下面的代码中,我想在整个dict中使用整数作为键:
import itertools
N = {}
for a,b,c,d in itertools.product(range(100), repeat=4):
x = a*a + c*c
y = a*b + c*d
z = b*b + d*d
s = x + y + y + z
N[s] += 1
print N
我在KeyError: 0
获得N[s] += 1
。为什么会这样? documentation表示
字符串和数字总是键
KeyError
上的wiki gives an explanation:
每当请求dict()对象时,Python就会引发KeyError(使用 格式为
a = adict[key]
),密钥不在字典中。
我想要做的是构建一个带有未知密钥的dict(它们是即时计算的)并为它们保留一个计数器。我过去做过(用字符串作为键)所以这次我做错了什么? (我知道 - 这一定是非常明显的,但经过一段时间瞪眼这个复杂的代码我需要帮助:))
答案 0 :(得分:2)
import itertools
from collections import defaultdict
N = defaultdict(int)
for a,b,c,d in itertools.product(range(100), repeat=4):
x = a*a + c*c
y = a*b + c*d
z = b*b + d*d
s = x + y + y + z
N[s] += 1
print N
# answer is too long to include here
答案 1 :(得分:1)
在您的第一次迭代中,N
为空,但您尝试访问N[0]
您可以使用
解决此特定问题if s in N:
N[s] += 1
else:
N[s] = 0 # or 1 or whatever
但正如@monkut在评论中所说,你应该使用Counter
答案 2 :(得分:1)
Counter
最好,因为它有分析结果的方法,但您也可以使用defaultdict
:
from collections import defaultdict
N = defaultdict(int)
如果没有密钥,则该值将初始化为int
的默认值,该值为零。