Отвечая на конкретный вопрос здесь, в 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)