我有以下代码:
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中将条目附加到相应的sport文件中
我希望在迭代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
问题:为什么每次迭代都要将项附加到所有子字典中,而不是将每个项添加到catch ALL o.json中,然后再添加到相应的sport子字典中?注意-“spotlight是一个列表,而不是dict,所以append()应该是合适的工具,是吗?你知道吗
您使用的是一个具有可变列表的常量字典对象。这意味着您现在在整个结构中共享同一个dictionary对象(和list对象)。你知道吗
发布的代码不会这样做;请用您在此处发布的内容替换常量。:-)
如果必须使用常量(例如,在多个位置需要相同的结构),请改用工厂函数:
在任何需要新拷贝的地方使用
SPOTLIGHT()
。你知道吗相关问题 更多 >
编程相关推荐