如何将'数组'从QueryDict保存到变量中

0 投票
1 回答
1097 浏览
提问于 2025-04-17 21:55

我有一个这样的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]存储在一个变量里?

1 个回答

1

Django的QueryDict相比于传统的dict,有一些额外的方法来处理每个键对应多个值的情况。对你来说,比较有用的方法有:

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这样的“正常”字典方法总是只返回一个单一的值(即该键的最后一个值)。

撰写回答