Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使字典值成为另一个值的键?_Python_Dictionary - Fatal编程技术网

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

Python 如何使字典值成为另一个值的键?,python,dictionary,Python,Dictionary,我有一篇ajax文章,它将一个字典从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

我有一篇ajax文章,它将一个字典从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'],
因此,我试图在后端对其进行重组,使其看起来像这样:

{'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'],

有什么想法吗?

一个问题:不能使用
列表作为
dict
的键,因为它是不可散列的

您可以使用正则表达式模块(
re
)检查每个键,以确定它是否符合表达式

output\[(\d+)\]\[description\]
对于每一个这样做的,找到相应的键

 output[$1][input]
将它们放在最后的
目录中

以下是草图:

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)      

我同意@Klaus D.的评论,您需要重新组织API以使用JSON,这将简化事情,但在此之前,以下解决方案将比使用正则表达式快得多,并提供预期的输出

i=0
for key,val in inp.items():
    if i<3:
        print(f"{inp['output['+str(i)+'][description]']}:{inp['output['+str(i)+'][input]']}")
        i+=1
i=0
对于键,inp.items()中的val:

如果你应该重新组织你的API来使用正确的JSON。不要在键中使用索引和键,而是使用对象列表的嵌套结构!这也解决了大约100个其他问题