首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误“字典在迭代过程中更改大小”

错误“字典在迭代过程中更改大小”
EN

Stack Overflow用户
提问于 2022-01-02 23:28:14
回答 1查看 81关注 0票数 -2

当我从list_of_dictionaries中删除list()时,python给出了“迭代期间更改字典大小”的错误

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-02 23:43:16

就像约翰-戈登所说的。这条线

代码语言:javascript
复制
dissimilar_frag_dict=frag_dict 

实际上,给出了frag_dict对dissimilar_frag_dict的引用。它们都指向相同的内容。list(frag_dict.items())给出了一个迭代的项dicts列表。在迭代过程中,运行

代码语言:javascript
复制
dissimilar_frag_dict.pop(max_lexicographic_order,'dne')

这和

代码语言:javascript
复制
frag_dict.pop(max_lexicographic_order,'dne')

实际上,dissimilar_frag_dict引用了frag_dict。因此,字典的内容实际上在迭代过程中发生了变化。这是不允许的,因为从dict中取出的内容可能是当前的迭代值,下一个值在这些条件下将无效,从而触发所引用的错误以避免潜在的问题。

我建议你做的是替换

代码语言:javascript
复制
dissimilar_frag_dict=frag_dict 

通过

代码语言:javascript
复制
dissimilar_frag_dict={**frag_dict}

这将创建一个新字典,其中包含旧字典的键/值对副本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70560508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档