python - Plotly Dash:TypeError:字符串索引必须是整数
问题描述
回调函数display_popup
遍历来自customdata
参数的json 字符串传递mapbox graph
并读取值。当我在 jupyter notebook 中运行没有该函数的代码时,它不会引发错误。
@app.callback([Output("modal","is_open"),
Output("name","children"),
Output("address","children")],
[Input("map-graph1","clickData")]
)
def display_popup(clickData):
res = json.dumps(clickData, indent=2)
Tenant = res['points'][0]['customdata']['Tenant']
Address = res['points'][0]['customdata']['Address']
print(Tenant, Address)
clickData = {
"points": [
{
"curveNumber": 64,
"pointNumber": 0,
"pointIndex": 0,
"lon": -112.07451978751655,
"lat": 33.459071231389125,
"customdata": {
"Tenant": "HeartFlow",
"Industry": "Advertising",
"Space": 65195,
"Property": "Retail",
"Bldg. class": "A",
"Lease Type": "Flex",
"Rent": 36.28,
"Address": "100 W Roosevelt St, Phoenix, AZ 85003, USA"
}
}
]
}
或者,我也尝试过带有键值对的字典。
for x in res['points']:
cd = x.get('customdata')
name = cd.get('Tenant')
address = cd.get('Address')
仍然抛出一个TypeError: string indices must be integers
解决方案
这是修复它的代码:
# Update modal on click event
@app.callback([Output("modal","is_open"),
Output("Name","children"),
Output("Address","children")],
[Input("map-graph1","clickData"),
Input("close","n_clicks")],
[State("modal", "is_open")],
)
def display_popup(clickData, close, is_open):
if clickData is None:
return [no_update] * 3
else:
#res = json.dumps(clickData, indent=2)
Tenant = clickData['points'][0]['customdata']['Tenant']
Address = clickData['points'][0]['customdata']['Address']
return(not is_open, Tenant, Address)
if close:
return is_open
推荐阅读
- vba - 使用 VBA 清理 Word 中的非结构化数据
- python - 我试图开始使用 python 的多处理模块但不工作
- python - 使用 python 运行 .bat 文件
- javascript - 使用 mongoose 查询 MongoDB 中的特定子文档
- reactjs - 如何在反应中测试异步
- python - 如何以某种方式更改数据框 pandas python?
- android - Android - 按需显示启动器选择器对话框
- windows - 如何锁定 docker 的 config.json 文件?
- r - 从模拟数据中分离两个类
- javascript - 如何从 `.txt` 或 `.css` 文件中获取 html 中选项标签中的数据?