我有一个以下QueryDict结构:
QueryDict: {u'tab[1][val1]': [u'val1'], u'tab[1][val2]': [u'val2'], u'tab[0][val1]': [u'val1'], u'tab[1][val2]': [u'val2']}
我想将它存储在一个可迭代的变量中,所以我可以这样做:
for x in xs:
do_something(x.get('val1'))
其中x是tab [0]等
我试过了:
dict(request.POST._iteritems())
但它不会返回tab [0],而是将tab [0] [val1]作为元素返回。 是否可以将整个tab [idx]存储在变量?
中答案 0 :(得分:1)
与传统的dict
相比,Django的QueryDict还有一些额外的方法来处理每个键的多个值;对您的目的有用的是:
QueryDict.iterlists()
与QueryDict.iteritems()
类似,但不包括 所有值,作为列表,为每个字典成员。
QueryDict.getlist(key, default)
以Python列表的形式返回带有请求键的数据。如果密钥不存在且未提供默认值,则返回空列表。除非默认值没有列表,否则保证返回某种列表。
QueryDict.lists()
与items()类似,但它包含所有值,作为列表,用于字典的每个成员。
所以你可以这样做:
qd = QueryDict(...)
for values in qd.lists():
for value in values:
do_something(value)
另请注意,"正常"像get
这样的dict方法总是只返回一个值(该键的最后一个值)。