Python 困惑:dict.pop

2 投票
1 回答
875 浏览
提问于 2025-04-16 02:46

我对Python的某些行为感到很困惑。

举个例子,我有一个叫“copy”的字典。(它是django中HttpRequest.POST的一个副本。)

下面是一个调试会话(我加了行号):

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方法访问时,又得到了一个列表。

这让我很困惑。有人能帮忙解释一下吗?

1 个回答

5

你可以看看这个文档,里面讲的是QueryDict。简单来说,它是一个字典(dict)的变种,改变了你获取数据的方式。比如说,当你用copy['text']去获取数据时,它会返回和'text'相关联的值列表中的最后一个值。因为它没有修改pop这个方法,所以如果你用pop,它会返回整个值的列表。

你可以使用.getlist来获取和某个特定值相关联的所有值列表:

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

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

这样做的原因是,有些HTML元素会为同一个键返回多个值。

撰写回答