簡體   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