只能访问Python unicode字典中列表的最后一个元素

时间:2017-03-15 12:42:45

标签: python django python-2.7 dictionary unicode

我的Python unicode字典如下所示:

`<QueryDict: {u'csrfmiddlewaretoken':[u'oacUfIz5q2tPtmSoqCQi7tBDn2ejpt4x9ZiFeLKeIOyB2CHvAoJqbe1cHNZJSObP'], u'Date and Events[]': [u'2000-09-09', u'bday', u'second']}>`

当我尝试使用键&#39;日期和事件[]&#39;访问元素时,我只获得列表的最后一个元素。知道为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

使用.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类型,其中&#34;是一个类似字典的类,用于处理同一个键的多个值。&#34;不幸的是,QueryDict.__getitem__()&#34;会返回最后一个值&#34;只要。这意味着对someQueryDict[key]的调用不会返回列表,即使存在与该键相关联的多个值也是如此。

解决方案是使用QueryDict.getlist(key, default=None)

  

返回具有请求密钥的数据,作为Python列表。返回一个   如果密钥不存在且未提供默认值,则为空列表。   除非默认值,否则保证返回某种列表   提供的不是列表。

答案 1 :(得分:1)

Dict中的

__ getitem __()按原样返回项目。无论是int,float,string还是list。但是QueryDict的情况并非如此。您必须使用QueryDict.getlist(key)或将其转换为Dict才能完成工作。让我们假设&#39; qd&#39;是要从中提取项目的QueryDict。

    date = QueryDict.getlist('Date')
    events = QueryDict.getlist('Events[]')

如果您希望将QueryDict转换为dict,那么您可以执行类似的操作来完成任务。

    myDict = dict(qd.iterlists())
    date = myDict['Date']
    events = myDict['Events[]']