我有以下代碼:追加()算法錯誤地追加
其中sportMappings = {"sport1" : {"file" : "sport1.json", "label" : "Sport 1"},"sport2" : {"file" : "sport2.json", "label" : "Sport 2"},"sport3" : {"file" : "sport3.json", "label" : "Sport 3"}}
normalizedEntries = {"o.json" : {"spotlight" : []}}
normalizedEntries = createList(normalizedEntries, map_key, sportMappings)
def createList(normalizedEntries, key, sportMappings):
for range in SOURCES["ranges"]:
data = read_files.readJSONUrl(logger, SOURCES[key] + str(range))
for entry in data["entries"]:
normalizedEntry = normalize(entry, "type")
if normalizedEntry is not None:
#append to a catchall dict
normalizedEntries["o.json"]["spotlight"].append(normalizedEntry)
if normalizedEntry["league"] in sportMappings:
if sportMappings[normalizedEntry["league"]]["file"] not in normalizedEntries:
normalizedEntries[sportMappings[normalizedEntry["league"]]["file"]] = {"spotlight" : []}
#append to the specific league to which that sport belongs...ie sport1, sport2
normalizedEntries[sportMappings[normalizedEntry["league"]]["file"]]["spotlight"].append(normalizedEntry)
else:
pass
return normalizedEntries
的點的是獲得JSON輸入,在JSON遍歷每個對象,正常化它的格式,則所有的對象追加到o.json,然後將該條目附加到sportMappings字典中對應的運動文件。
我希望以後迭代1 normalizedEntries'的內容將是:
--o.json
--entryForSport2
--sport1.json
--sport2.json
--entryForSport2
--sport3.json
迭代2次之後normalizedEntries'的內容將是:
--o.json
--entryForSport2
--entryForSport1
--sport1.json
--entryForSport1
--sport2.json
--entryForSport2
--sport3.json
等。
相反,在函數完全運行後,所有子字典都是相同的。
--o.json
--entryForSport2
--entryForSport1
--sport1.json
--entryForSport2
--entryForSport1
--sport2.json
--entryForSport2
--entryForSport1
--sport3.json
--entryForSport2
--entryForSport1
問:爲什麼項目被追加到每個迭代所有子字典,而不是每個項目進入雜物箱o.json,然後到其適當的運動subdict?筆記 - 「聚光燈是一個列表,而不是一個字典那麼追加()應該是合適的工具,是
這聽起來好像您在某處重用列表對象,但您的代碼爲每個'file'鍵創建* new *字典條目;你確定你在這裏發佈的代碼是完整和準確的嗎? –
垃圾!唯一的區別是我使用了一個常量SPOTLIGHT = {「spotlight」:[]}來初始化它們,而不是這個{「spotlight」:[]}。我在上面的代碼中更改了它,使其更易於閱讀......我敢打賭,這是問題所在。 – Brad
哦,那是*絕對*這裏的問題。 –