如何在python中使用整数作为键?

时间:2013-10-08 07:30:05

标签: python dictionary

在下面的代码中,我想在整个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(它们是即时计算的)并为它们保留一个计数器。我过去做过(用字符串作为键)所以这次我做错了什么? (我知道 - 这一定是非常明显的,但经过一段时间瞪眼这个复杂的代码我需要帮助:))

3 个答案:

答案 0 :(得分:2)

使用defaultdict

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的默认值,该值为零。