我有一个ajax POST,它可以像这样从JavaScript将字典发送到我的Flask后端:
{'output[0][description]': ['Source File'],
'output[0][input]': ['Some_document.pdf'],
'output[1][description]': ['Name'],
'output[1][input]': ['Ari'],
'output[2][description]': ['Address'],
'output[2][input]': ['12 fake st']}
所以我试图在后端对其进行重组,使其看起来像这样:
['Source File']:['Some_document.pdf'],
['Name']:['Ari],
['Address']:['12 fake st'],
有什么想法吗?
答案 0 :(得分:1)
一个问题:您不能将list
用作dict
的密钥,因为它不可散列。
您可以使用正则表达式模块(re
)检查每个键以确定其是否符合表达式
output\[(\d+)\]\[description\]
针对每个这样做的人,找到对应的密钥
output[$1][input]
在最后的dict
中将它们放在一起。
以下是草图:
import re
P=re.compile('output\[(\d+)\]\[description\]')
inp = {'output[0][description]': ['Source File'], 'output[0][input]': ['Some_document.pdf'],
'output[1][description]': ['Name'], 'output[1][input]': ['Ari'],
'output[2][description]': ['Address'], 'output[2][input]': ['12 fake st']}
out = {}
for key in inp :
m = P.fullmatch(key)
if m :
out[inp[key][0]] = inp['output['+str(m.group(1))+'][input]'][0]
print(out)
答案 1 :(得分:0)
我同意@Klaus D.的评论,您需要重新组织API以使用JSON,这将简化事情,但是在此之前,以下解决方案将比使用regex快得多并提供预期的输出
@app.callback(
dash.dependencies.Output('filtered_df', 'children'),
[dash.dependencies.Input('prt-dropdown', 'value'),
dash.dependencies.Input('issuer-dropdown', 'value')]
)
def clean_data(prt, issuer):
if prt is not None and issuer is not None:
# code to reformat dataframe
return df_filter.to_json(date_format='iso', orient='split')