Python 如何使字典值成为另一个值的键?
我有一篇ajax文章,它将一个字典从javascript发送到我的Flask后端,如下所示: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
{'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个其他问题