当我从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发布于 2022-01-02 23:43:16
就像约翰-戈登所说的。这条线
dissimilar_frag_dict=frag_dict 实际上,给出了frag_dict对dissimilar_frag_dict的引用。它们都指向相同的内容。list(frag_dict.items())给出了一个迭代的项dicts列表。在迭代过程中,运行
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}这将创建一个新字典,其中包含旧字典的键/值对副本。
https://stackoverflow.com/questions/70560508
复制相似问题