Мне нужно удалить пару k / v из словаря в цикле. После получения RuntimeError: dictionary changed size during iteration
я удалил словарь после удаления k / v, и в одном из внешних циклов я пытаюсь открыть вновь выбранный / обновленный словарь. Однако, как многие из вас, вероятно, знают - я получаю ту же ошибку - я думаю, когда она достигает вершины цикла. Я не использую свой словарь в самом внешнем цикле.
Так что мой вопрос - кто-нибудь знает, как обойти эту проблему? Я хочу удалить пару k / V из словаря и использовать этот словарь с измененным размером на следующей итерации цикла.
чтобы сфокусировать проблему и использовать решение от Cygil
list=[27,29,23,30,3,5,40]
testDict={}
for x in range(25):
tempDict={}
tempDict['xsquared']=x*x
tempDict['xinverse']=1.0/(x+1.0)
testDict[(x,x+1)]=tempDict
for item in list:
print 'the Dictionary now has',len(testDict.keys()), ' keys'
for key in testDict.keys():
if key[0]==item:
del testDict[key]
Я делаю это, потому что мне нужно, чтобы некоторые научные сотрудники сравнивали некоторые наблюдения из двух наборов данных, которые не могли быть сопоставлены из-за вариантов имен. Идея состоит в том, чтобы выбросить имя из одного набора данных (скажем, из набора A), а затем на основе совпадения ключей найти все имена, связанные с этим ключом, в другом наборе данных (набор B). В одном совпадении я не хочу показывать значение из B снова, чтобы ускорить процесс для них. Поскольку есть 6000 наблюдений, я также не хочу, чтобы они начинались с начала А каждый раз, когда они возвращаются к работе. Тем не менее, я могу исправить это, позволив им выбрать последний ключ от A, с которым они работали. Но мне действительно нужно уменьшить B, как только будет определено совпадение