Итак, вот проблема, я импортирую словарь с любым размером от 6000 до 12000 ключей. Затем используйте вложенный алгоритм для группировки их в список внутри другого словаря. Я использую следующий код, чтобы проверить, если ключ в словаре:Эффективное повторение словаря в Python
for key in range(sizeOfOriginalKeys):
if key in key_data:
Как вы можете себе представить, это берет навсегда, так как алгоритм сортировки является довольно сложным. Я хотел бы только перебирать ключи в «key_data», не делая 1000 до 11999, если есть этот ключ в словаре. Есть ли способ сделать список текущих ключей? Затем итерации через них? Или, по крайней мере, что-то более эффективное, чем то, что я сейчас делаю?
Текущий код после того, как предложение Кевина:
for key in key_data:
currentKey = key_data[key].name
if key_data[currentKey].prefList[currentPref] == currentGroup
key_data[currentKey].currentScore = getDotProduct()
group_data[currentGroup].keyList.append(key_data[currentKey])
group_data[currentGroup].sortKeys()
del key_data[currentKey]
Ключевые имена являются целыми числами. В конце алгоритма сортировки я удаляю ключ, если он был отсортирован в группу. Теперь я получаю сообщение об ошибке: изменился размер словаря во время итерации.
Мысли?
Вы можете показать немного больше вашего скелет алгоритма? – goncalopp
Конечно, один момент. Я отредактирую свой оригинальный пост. – TheNoviceAllen
Проверка ключа в dict - это операция O (1), поэтому очень дешево - возможно, есть и другие области, которые необходимо оптимизировать. Не удаляйте элемент из key_data в цикле, вы не можете изменить dict, над которым работаете. Если вам нужно знать, что вы обработали его, добавьте ключ в обработанный 'set()' – AChampion