python混淆: dict. pop

标签 python django

我真的很困惑为什么 Python 以特定的方式运行。

这是一个例子:我有一本名为“copy”的字典。 (它是 django 中 HttpRequest.POST 的副本。)

这是一个调试 session (添加了行号):

1 (Pdb) copy
2 <QueryDict: {u'text': [u'test'], u'otherId': [u'60002'], u'cmd': [u'cA'], u'id':
3  [u'15']}>
4 (Pdb) copy['text']
5  u'test'
6 (Pdb) copy.pop('text')
7  [u'test']

我的问题是,在字典中,值看起来都是列表(它们以这种方式来自 django。)当我访问第 4 行中的元素时,我将其作为值而不是列表获取,但是当我使用 pop 访问它,我再次将其作为列表获取。

我对此感到非常困惑。有人可以帮忙吗?

最佳答案

看看 docs对于QueryDict。简短的回答是它是 dict 的子类,它修改了获取项目的方式,因此 copy['text'] 将返回最后'text' 关联的值列表中的值。由于它们没有重写 pop,因此它将返回整个列表。

您可以使用.getlist获取与特定值关联的列表:

copy['text']
>>> u'test'

copy.getlist('text')
>>> [u'test']

原因是某些 HTML 元素将为单个键返回多个值。

关于python混淆: dict. pop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3481131/

相关文章:

找不到 Python flask jinja 图像文件

python - 我应该如何在我的 Mac 上设置我的第一个 MySQL 数据库?

python - 树莓派与Python

python - 如何进行prefetch_相关?我做错了吗?

python - 初学者 : python namespace collision?

python - Boost.Python 快速入门链接器错误

python - 我们如何调用需要协程的普通函数?

python - Django Do Once 自定义模板标签

django - 在Django生产教程上提供静态文件

python - 无法将 WSGI 脚本加载为 Python 模块——500 内部服务器错误