我不明白當我從 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
uj5u.com熱心網友回復:
正如@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}
用舊字典的鍵/值對的副本創建一個新字典。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/401835.html