Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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 迭代ImmutableMultiDict并将其转换为唯一的json对象_Python_Json_Dictionary_Flask - Fatal编程技术网

Python 迭代ImmutableMultiDict并将其转换为唯一的json对象

Python 迭代ImmutableMultiDict并将其转换为唯一的json对象,python,json,dictionary,flask,Python,Json,Dictionary,Flask,我正在开发一个web应用程序,当我将问题从前端发送到后端(在flask中制作)时,它可以作为投票创建。这是我发送的数据示例: ImmutableMultiDict( [ (“选择”,“你喜欢狗吗?”), (‘选项1’、‘是’), (‘选项2’、‘否’), (“文本”,“你为什么喜欢狗?”), (‘textField’,“”), (“范围”,“你有多喜欢狗?”), ('rangeField','2.5') ] ) 如您所见,选项1和选项2是第一个问题的可用答案(这是一个带有“您喜欢狗吗?”问题的

我正在开发一个web应用程序,当我将问题从前端发送到后端(在flask中制作)时,它可以作为投票创建。这是我发送的数据示例:

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'}]