【发布时间】:2012-01-06 18:46:06
【问题描述】:
在 SO 中回答特定问题时,我偶然发现了一个我无法解释的特殊问题。不幸的是,前两个 Google 搜索页面返回了一个 SO 页面,这也没有帮助。
问题代码
>>> somedata=[random.randint(1,1000) for i in xrange(1,10000)]
>>> somehash=collections.defaultdict(int)
>>> for d in somedata:
somehash[d]+=1
>>> maxkey=0
>>> for k,v in somehash.iteritems():
if somehash[maxkey] > v:
maxkey=k
Traceback (most recent call last):
File "<pyshell#700>", line 1, in <module>
for k,v in somehash.iteritems():
RuntimeError: dictionary changed size during iteration
>>> for k,v in somehash.iteritems():
if somehash[maxkey] > v:
maxkey=k
>>>
由于一些奇怪的原因,我第一次迭代字典时,Python 正在发脾气,但随后的执行很好,正如您在示例中看到的那样,我第一次迭代字典时,它给出了运行时错误,但下一次它没有抱怨。
知道可能出了什么问题吗?
以防万一
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=0, releaselevel='final', serial=0)
>>> sys.version
'2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)]'
OS: Microsoft Windows [Version 6.1.7601] (Windows 7)
【问题讨论】:
-
比较
somehash[maxkey] > k将dict中的计数与哈希值进行比较,这似乎毫无意义。你想做什么? -
@Sven,这是一个拼写错误。我会纠正它。它应该是
somehash[maxkey] > v,我正在尝试迭代并确定字典中的最大值,同时只跟踪键。
标签: python dictionary iterator runtime-error