让我假装我有以下QueryDict:
<QueryDict: {u'num': [0], u'var1': [u'value1', u'value2'], u'var2': [u'8']}>
Run Code Online (Sandbox Code Playgroud)
我想要一本字典,例如:
{'num': [0], 'var1':['value1', 'value2'], 'var2':['8']}
Run Code Online (Sandbox Code Playgroud)
(我不在乎unicode符号是u
保留还是继续.)
如果我这样做queryDict.dict()
,正如django网站所建议的那样,我会失去属于的额外值var1
,例如:
{'num': [0], 'var1':['value2'], 'var2':['8']}
Run Code Online (Sandbox Code Playgroud)
我在想这样做:
myDict = {}
for key in queryDict.iterkeys():
myDict[key] = queryDict.getlist(key)
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
pan*_*ore 179
Django中的新功能> = 1.4.
QueryDict.dict()
https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.QueryDict.dict
Ale*_*tti 100
这应该工作: myDict = dict(queryDict.iterlists())
Dan*_*aro 13
这就是我最终使用的内容:
def qdict_to_dict(qdict):
"""Convert a Django QueryDict to a Python dict.
Single-value fields are put in directly, and for multi-value fields, a list
of all values is stored at the field's key.
"""
return {k: v[0] if len(v) == 1 else v for k, v in qdict.lists()}
Run Code Online (Sandbox Code Playgroud)
根据我的用法,这似乎可以为您提供一个列表,您可以将其发送回例如表单构造函数.
编辑:也许这不是最好的方法.看起来如果你想要写QueryDict
一个文件出于任何疯狂的原因,那QueryDict.urlencode()
就是要走的路.重建QueryDict
你只需要做QueryDict(urlencoded_data)
.
omk*_*dav 11
只需简单地添加
queryDict=dict(request.GET)
或者queryDict=dict(QueryDict)
在您看来,数据将作为 python Dict 保存在 querDict 中。
from django.utils import six
post_dict = dict(six.iterlists(request.POST))
Run Code Online (Sandbox Code Playgroud)
如果您不希望将值作为数组,则可以执行以下操作:
# request = <QueryDict: {u'key': [u'123ABC']}>
dict(zip(request.GET.keys(), request.GET.values()))
{u'key': u"123ABC" }
# Only work for single item lists
# request = <QueryDict: {u'key': [u'123ABC',U 'CDEF']}>
dict(zip(request.GET.keys(), request.GET.values()))
{u'key': u"CDEF" }
Run Code Online (Sandbox Code Playgroud)
zip是一个强大的工具,请阅读http://docs.python.org/2/library/functions.html#zip