我有以下設置:迭代它時修改集合是否有任何危險?
co_occurrences = defaultdict(lambda: defaultdict(int))
# Populate the dictionary...
for word, occurrence_vector in co_occurrences:
if word == "__length": continue
for file_name, occurrence_count in occurrence_vector:
co_occurrences[word][file_name] = occurrence_count/co_occurrences["__length"][file_name]
這是行:
co_occurrences[word][file_name] = occurrence_count/co_occurrences["__length"][file_name]
危險嗎?由於危險,我的意思是我想遍歷每個鍵一次,只有一次,所以修改此行爲的任何代碼都是危險的。我覺得可能是因爲我正在修改我正在迭代的數據結構。
你可以通過使用co_occurrences.keys()中的for word來解決這個問題:occurrence_vector = co_occurrences [word]'它會生成密鑰列表的一個副本並對其進行迭代。 – Perkins
在你的字典裏還有一個魔術入口'「__length」'真的很奇怪。只需製作一個將文件名映射到其長度的'file_length'字典。 – U2EF1
相關:http://stackoverflow.com/a/2315529/846892 –