将Pandas处理的JSON输出到dcc.Store时类型错误如何解决?
报错核心原因
- 你在定义回调时将单个Output放在了列表中,此时回调函数的返回值必须是和Output列表长度一致的列表/元组,你当前直接返回单个字符串,结构不匹配。
dcc.Store的data属性原生支持Python字典、列表等可序列化结构,Dash会自动完成JSON序列化,无需手动调用json.dumps转字符串,手动转字符串反而会导致后续取数时需要额外反序列化。
最优修改方案(推荐)
直接移除Output外层多余的列表,直接返回字典即可,修改后代码如下:
@app.callback( # 单个输出不需要放在列表中 Output('intermediate-value', 'data'), [ Input("keyword-selection", "value"), Input("status-selection", "value") ] ) def color_map(keyword_selected, status_selected): local_df = df_xy_coord[df_xy_coord["active"] == status_selected].copy() if status_selected != "All" else df_xy_coord color_index = 0 for keyword in keyword_selected: local_df.loc[local_df["keyword"] == keyword, 'color'] = colors[color_index] color_index += 1 color_dictionary = dict( zip( local_df.keyword, local_df.color ) ) # 直接返回字典,Dash自动完成序列化 return color_dictionary
保留原有Output结构的修改方案
如果你不想修改Output的列表写法,只需要将返回值用列表/元组包裹即可:
# 替换原来的return语句即可 return [color_dictionary] # 或者用元组格式 return (color_dictionary,)
内容的提问来源于stack exchange,提问作者Josh Voytek
相关产品推荐
相关产品推荐

