我想通过for循环创建一个嵌套的字典。所有客户和类别键均按预期方式创建(i和j),但是对于product_categories仅写入最后一个键。我知道它可能会被覆盖,但是我不明白为什么?
top_10_recs = {}
for i, j, k in itertools.product(customers, categories, product_categories):
if i not in top_10_recs:
top_10_recs[i] = {}
if j not in top_10_recs:
top_10_recs[i][j] = {}
if k not in top_10_recs:
top_10_recs[i][j][k] = {}
try:
top_10_recs[i][j][k] = trained_dataframe.loc[(i, j), k].nlargest(10).to_dict()
except:
pass
如果我以此打印:
for i, j, k in itertools.product(customers, categories, product_categories):
try:
print("{}".format(k))
print(trained_dataframe.loc[(i, j), k].nlargest(10))
我得到了预期的结果,遍历了所有product_categories。
答案 0 :(得分:1)
如果在词典中不存在新键,则仅在它们内部创建新键时要小心。下面的代码段应该可以使用。
if i not in top_10_recs:
top_10_recs[i] = {}
if j not in top_10_recs[i]:
top_10_recs[i][j] = {}
if k not in top_10_recs[i][j]:
top_10_recs[i][j][k] = {}
还考虑使用except KeyError
而不只是使用except
,它会捕获所有可能的错误(您不希望这样)。