2010-08-13 109 views
1

我真的很困惑,爲什麼Python以特定的方式行事。python混淆:dict.pop

這裏是一個例子:我有一個名爲「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

你應該編輯你的問題的標題:這根本不是Python的問題,而是Django QueryDicts。 – 2010-08-14 08:00:31

回答

5

查看QueryDict s的docs。簡短的回答是它是dict的一個子類,它修改了您獲取項目的方式,因此copy['text']將返回與'text'關聯的值列表中的最後值。由於它們沒有覆蓋pop,它將返回整個列表。

您可以使用.getlist獲得與特定值相關聯的列表:

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

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

這樣做的原因是,一些HTML元素將返回多個值的單個密鑰。