如何使字典值成为另一个值的键?

时间:2019-02-25 02:33:08

标签: python dictionary

我有一个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'],

有什么想法吗?

2 个答案:

答案 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')