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

如何在python中使用整数作为键?,python,dictionary,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 我在N[s]+=1处得到一个KeyError:0。为什么会这样?报告说 字符串和数字始

在下面的代码中,我想在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
我在
N[s]+=1
处得到一个
KeyError:0
。为什么会这样?报告说

字符串和数字始终可以是键

on
键错误

每当请求dict()对象时(使用 格式
a=adict[key]
)和键不在字典中


我想做的是用未知的键(它们是动态计算的)构建一个dict,并为它们保留一个计数器。我以前做过(用字符串作为键),那么这次我做错了什么?(我知道-这肯定是非常明显的,但在一段时间后,我需要帮助:)

在您的第一次迭代中,
N
是空的,但是您正在尝试访问
N[0]

您可以使用

if s in N:
    N[s] += 1
else:
    N[s] = 0 # or 1 or whatever

但是正如@monkut在评论中所说的,您应该在第一次迭代中使用一个

N
为空,但是您正在尝试访问
N[0]

您可以使用

if s in N:
    N[s] += 1
else:
    N[s] = 0 # or 1 or whatever
但正如@monkut在评论中所说的,你应该使用

使用


计数器是最好的,因为它有分析结果的方法,但您也可以使用
defaultdict

from collections import defaultdict
N = defaultdict(int)

如果键不存在,则值将初始化为
int
的默认值,即零。

计数器最好,因为它有分析结果的方法,但您也可以使用
defaultdict

from collections import defaultdict
N = defaultdict(int)

如果密钥不存在,该值将被初始化为
int
的默认值,即零。

您的密钥未定义,因此您会得到一个错误。(不能向不存在的内容添加1)。您可能想使用
计数器
从集合导入计数器;N=Counter()
谢谢-我关注的是键的存在,而不是值。作为StackOverflow哲学的一个附带问题:为什么这样的问题会被否决?(我理解否决票的概念,我想知道为什么这个问题不合适)你的问题很好。您提供了实际的代码,列出了收到的错误,并尝试破译错误。如果人们不喜欢你的问题,他们应该留下一条评论,说明原因。你的密钥没有定义,因此你会得到一个错误。(不能向不存在的内容添加1)。您可能想使用
计数器
从集合导入计数器;N=Counter()
谢谢-我关注的是键的存在,而不是值。作为StackOverflow哲学的一个附带问题:为什么这样的问题会被否决?(我理解否决票的概念,我想知道为什么这个问题不合适)你的问题很好。您提供了实际的代码,列出了收到的错误,并尝试破译错误。如果人们不喜欢你的问题,他们应该留下评论,说明原因。谢谢-我不知道计数器,它确实简化了代码。谢谢-我不知道计数器,它确实简化了代码。