首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >只能访问Python字典中列表的最后一个元素。

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

Stack Overflow用户
提问于 2017-03-15 12:42:45
回答 2查看 379关注 0票数 3

我的Python字典如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
`<QueryDict: {u'csrfmiddlewaretoken':[u'oacUfIz5q2tPtmSoqCQi7tBDn2ejpt4x9ZiFeLKeIOyB2CHvAoJqbe1cHNZJSObP'], u'Date and Events[]': [u'2000-09-09', u'bday', u'second']}>`

当我尝试使用键'Date and Events[]‘访问元素时,我只得到列表的最后一个元素。知道为什么会这样吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-16 04:02:43

Dict中的__getitem__()按原样返回项。无论是int、float、string还是list。但QueryDict的情况并非如此。要么您必须使用QueryDict.getlist(key),要么将其转换为Dict来完成您的工作。让我们假设'qd‘是您要从其中提取项目的QueryDict。

代码语言:javascript
代码运行次数:0
运行
复制
    date = QueryDict.getlist('Date')
    events = QueryDict.getlist('Events[]')

如果您希望将QueryDict转换为dict,那么您可以这样做来完成任务。

代码语言:javascript
代码运行次数:0
运行
复制
    myDict = dict(qd.iterlists())
    date = myDict['Date']
    events = myDict['Events[]']
票数 2
EN

Stack Overflow用户

发布于 2017-03-15 14:00:26

使用.getlist(key)

代码语言:javascript
代码运行次数:0
运行
复制
>>> 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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42810116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档