[英]error 'dictionary changed size during iteration'
当我从 list_of_dictionaries 中删除 list() 时,我不明白,python 给出此错误“迭代期间字典更改大小”
dissimilar_frag_dict=frag_dict
list_of_dictionary_elements=list(frag_dict.items()) #this is the problem
for s1_key,s1_value in list_of_dictionary_elements :
for s2_key,s2_value in list_of_dictionary_elements :
similarity=get_similarity(s1_value,s2_value)
if similarity>=threshold and s1_key!=s2_key:
max_lexicographic_order=max(s1_key,s2_key)
dissimilar_frag_dict.pop(max_lexicographic_order,'dne')
print(f'number 0f dissimilar genes:{len(dissimilar_frag_dict)}')
return dissimilar_frag_dict
正如@john-gordon 所说。 这条线
dissimilar_frag_dict=frag_dict
实际上意味着将 frag_dict 的引用提供给 dissimilar_frag_dict。 它们都指向相同的内容。 list(frag_dict.items()) 给出迭代的项目字典列表。 在迭代过程中,您运行
dissimilar_frag_dict.pop(max_lexicographic_order,'dne')
这与
frag_dict.pop(max_lexicographic_order,'dne')
什么来自dissimilar_frag_dict引用frag_dict的事实。 因此字典的内容实际上在迭代过程中发生了变化。 这是不允许的,因为从dict中取出的内容可能是当前的迭代值,并且在这些情况下下一个值将是无效的,从而触发引用的错误以避免潜在的问题。
我建议你做的是更换
dissimilar_frag_dict=frag_dict
经过
dissimilar_frag_dict={**frag_dict}
它使用旧字典的键/值对的副本创建一个新字典。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.