【发布时间】:2013-10-08 07:30:05
【问题描述】:
在以下代码中,我想使用整数作为字典中的键:
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。为什么会这样? documentation 表示
字符串和数字总是可以作为键
KeyError 上的wiki gives an explanation:
每当请求 dict() 对象时,Python 都会引发 KeyError(使用 格式
a = adict[key]) 并且键不在字典中。
我想做的是用未知的键(它们是即时计算的)构建一个字典,并为它们保留一个计数器。我过去做过(用字符串作为键)所以这次我做错了什么? (我知道 - 这一定非常明显,但在盯着这个复杂的代码一段时间后我需要帮助:))
【问题讨论】:
-
您的密钥未定义,因此您收到错误消息。 (你不能给不存在的东西加 1)。您可能想使用
Counter、from collections import Counter; N = Counter() -
谢谢 - 我关注的是键的存在而不是值。
-
作为对习惯于 StackOverflow 哲学的人的一个附带问题:为什么这样的问题会被否决? (我理解反对票的概念,我想知道为什么这个问题不合适)
-
你的问题很好。您提供了实际代码,列出了您收到的错误并进行了尝试并破译了错误。如果人们不喜欢您的问题,他们应该就原因发表评论。
标签: python dictionary