Python 如何在Flask上使用ImmutableMultiDict获取嵌套字典的值?

Python 如何在Flask上使用ImmutableMultiDict获取嵌套字典的值?,python,flask,werkzeug,Python,Flask,Werkzeug,当通过请求发送上述参数时,如何使用烧瓶上的request.form获取地址键中的值 address_dict = {'address': {'US': 'San Francisco', 'US': 'New York', 'UK': 'London'}} 然后我在flask.request的上下文中得到了这个 import requests url = 'http://example.com' params = {"address": {"US": "San Francisco", "UK"

当通过请求发送上述参数时,如何使用烧瓶上的request.form获取地址键中的值

address_dict = {'address': {'US': 'San Francisco', 'US': 'New York', 'UK': 'London'}}
然后我在flask.request的上下文中得到了这个

import requests
url =  'http://example.com'
params = {"address": {"US": "San Francisco", "UK": "London", "CH": "Shanghai"}}
requests.post(url, data=params) 
如何获取每个地址键中的值

谢谢。

例如:

ImmutableMultiDict([('address', u'US'), ('address', 'US'), ('address', 'UK')])
印刷品:

from werkzeug.datastructures import ImmutableMultiDict
imd = ImmutableMultiDict([('address', u'US'), ('address', 'US'), ('address', 'UK')])
print imd.getlist('address')

编辑:

您的POST请求已发送,这意味着组合为键/值对。它不直接支持嵌套的dict结构。当我尝试您的卷发请求时,我得到以下信息:

[u'US', 'US', 'UK']
所以这里的键是按字面意思解释的

使用
urllib2
我得到以下结果:

ImmutableMultiDict([('address[US]', u'San Francisco'), ('address[US]', u'New York'), ('address[UK]', u'London')])
这里
urlencode
只发送一个表示内部dict的字符串

最后使用
请求

>>> print urllib2.urlopen("http://localhost:5000/post", data=urllib.urlencode(address_dict)).read()
ImmutableMultiDict([('address', u"{'UK': 'London', 'US': 'New York'}")])
在这里,阵列被展平,重复出现的关键点被消除

没有明确的方法可以用URL编码的方式发送像您这样的嵌套dict,因此您必须找到另一种解决方案。

您给出了以下示例:

>>> print requests.post("http://localhost:5000/post", data=address_dict).content
ImmutableMultiDict([('address', u'UK'), ('address', u'US')])
对于这样的请求,
request.form
如下所示:

ImmutableMultiDict([('address', u'US'), ('address', 'US'), ('address', 'UK')])
>>request.form
ImmutableMultiDict([('address[US]',u'San Francisco'),('address[US]',u'New York'),
(“地址[英国],“伦敦”))
>>>申请表格[“地址[美国]”]
u'San Francisco'
>>>request.form.getlist('address[US]”)
[旧金山,纽约]
[
]
字符并不特殊,它们只是键的一部分,MultiDict不仅将每个键映射到一个值,还映射到一个值列表。使用[]进行的常规词汇访问只会为您提供第一个键,但getlist()方法会为一个键提供整个列表。其他方法可用,请参阅文档


如果您确实想要嵌套结构,请尝试使用JSON而不是平面表单数据。

在上面的示例中,有没有办法获取“San Francisco”?我的意思是家长口述中的口述价值。这些信息似乎不在口述中。。。我不确定你能不能寄一份这样的口述书。。。我必须检查一下。。。如何发送post请求?我通过curl发送post请求。对不起,没有解释。我想从地址dict获取价值(旧金山、纽约、伦敦)。谢谢!在这种情况下,我想使用dict而不是MultiDict。我试图找到解决办法。