我的Python字典如下所示:
`<QueryDict: {u'csrfmiddlewaretoken':[u'oacUfIz5q2tPtmSoqCQi7tBDn2ejpt4x9ZiFeLKeIOyB2CHvAoJqbe1cHNZJSObP'], u'Date and Events[]': [u'2000-09-09', u'bday', u'second']}>`
当我尝试使用键'Date and Events[]‘访问元素时,我只得到列表的最后一个元素。知道为什么会这样吗?
发布于 2017-03-15 20:02:43
Dict中的__getitem__()按原样返回项。无论是int、float、string还是list。但QueryDict的情况并非如此。要么您必须使用QueryDict.getlist(key),要么将其转换为Dict来完成您的工作。让我们假设'qd‘是您要从其中提取项目的QueryDict。
date = QueryDict.getlist('Date')
events = QueryDict.getlist('Events[]')
如果您希望将QueryDict转换为dict,那么您可以这样做来完成任务。
myDict = dict(qd.iterlists())
date = myDict['Date']
events = myDict['Events[]']
发布于 2017-03-15 06:00:26
使用.getlist(key)
>>> qd = QueryDict('a=1&a=2') # a simple QueryDict
>>> qd
<QueryDict: {'a': ['1', '2']}>
>>> qd['a'] # example of the problem (last item only)
'2'
>>> qd.get('a') # problem not solved by .get()
'2'
>>> qd.getlist('a') # getlist() solves it!
['1', '2']
详细信息:
您的字典是django.http.QueryDict
类型的,它“是一个为处理同一键的多个值而定制的类似字典的类。”不幸的是,QueryDict.__getitem__()
“只返回最后一个值”。这意味着对someQueryDict[key]
的调用不会返回一个列表,即使有多个与键相关的值。
解决方案是使用QueryDict.getlist(key, default=None)
以Python列表的形式返回带有请求键的数据。如果键不存在且未提供默认值,则返回空列表。它保证返回某种类型的列表,除非提供的默认值不是list。
https://stackoverflow.com/questions/42810116
复制