繁体   English   中英

错误'字典在迭代期间改变了大小'

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM