У меня есть следующий код:Append() алгоритм неправильно добавляет
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 dict.
Я ожидаю, что после итерации 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? примечание - «Прожектор список, а не ДИКТ так присоединять() должна быть соответствующим инструментом, да
Это звучит так, как будто вы повторно используете объект списка где-то, но ваш код создает запись словаря * new * для каждого файла 'file'; вы уверены, что код, который вы разместили здесь, является полным и точным? –
Crap! ... Единственное различие заключается в том, что я использую константу SPOTLIGHT = {"spotlight": []} для инициализации, а не для этого {"spotlight": []}. Я изменил его в приведенном выше коде, чтобы было легче читать ... Держу пари, это проблема. – Brad
О, это * совершенно * проблема здесь. –