Python 迭代ImmutableMultiDict并将其转换为唯一的json对象
我正在开发一个web应用程序,当我将问题从前端发送到后端(在flask中制作)时,它可以作为投票创建。这是我发送的数据示例:Python 迭代ImmutableMultiDict并将其转换为唯一的json对象,python,json,dictionary,flask,Python,Json,Dictionary,Flask,我正在开发一个web应用程序,当我将问题从前端发送到后端(在flask中制作)时,它可以作为投票创建。这是我发送的数据示例: ImmutableMultiDict( [ (“选择”,“你喜欢狗吗?”), (‘选项1’、‘是’), (‘选项2’、‘否’), (“文本”,“你为什么喜欢狗?”), (‘textField’,“”), (“范围”,“你有多喜欢狗?”), ('rangeField','2.5') ] ) 如您所见,选项1和选项2是第一个问题的可用答案(这是一个带有“您喜欢狗吗?”问题的
ImmutableMultiDict(
[
(“选择”,“你喜欢狗吗?”),
(‘选项1’、‘是’),
(‘选项2’、‘否’),
(“文本”,“你为什么喜欢狗?”),
(‘textField’,“”),
(“范围”,“你有多喜欢狗?”),
('rangeField','2.5')
]
)
如您所见,选项1和选项2是第一个问题的可用答案(这是一个带有“您喜欢狗吗?”问题的选择表单),我希望迭代此问题的元素并输出如下对象:
[
{
“标题”:“你喜欢狗吗?”,
“类型”:“选择”,
“选择”:[
“是的”,
“没有”
]
},
{
“标题”:“你为什么喜欢狗?”,
“类型”:“文本”
},
{
“标题”:“你有多喜欢狗?”,
“类型”:“范围”
}
]
目前我使用的代码是:
问题=[]
问题=无
当x在request.form中时:
如果(x=='select'或x=='checkbox'或x=='choices'或x=='text'或x=='range'或x=='date'):
如果有问题!=无:
问题。附加(问题)
currQuestion={“标题”:x,“类型”:x}
elif not(x=='textField'或x=='rangeField'或x=='dateField'):
如果(不是问题选项):
currQuestion.options=[]
currQuestion.options.append(x)
请注意,textField和rangeField值被忽略。
我是python新手,所以我不太了解它,这就是为什么这个问题很简单。您可以迭代
ImmutableMultiDict
的键值对,并通过检查键名来生成结果:
from werkzeug.datastructures import ImmutableMultiDict #for testing purposes
data = ImmutableMultiDict([('select', 'Do you like dogs?'), ('option1', 'Yes'), ('option2', 'No'), ('text', 'Why do you like dogs?'), ('textField', ''), ('range', 'How much do you like dogs?'), ('rangeField', '2.5')])
r, l, valid = [], None, {'select', 'text', 'range'}
for a, b in data.items():
if a in valid:
l = a
r.append({'title':b, 'type':a})
elif a.startswith('option') and l == 'select':
r[-1]['options'] = [*r[-1].get('options', []), b]
print(r)
输出:
[{'title': 'Do you like dogs?', 'type': 'select', 'options': ['Yes', 'No']},
{'title': 'Why do you like dogs?', 'type': 'text'},
{'title': 'How much do you like dogs?', 'type': 'range'}]