путаница в питоне: dict.pop - PullRequest
2 голосов
/ 14 августа 2010

Я действительно не понимаю, почему Python действует особым образом.

Вот пример: у меня есть словарь под названием "копия".(Это копия HttpRequest.POST в django.)

Вот сеанс отладки (с добавленными номерами строк):

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 голосов
/ 14 августа 2010

Посмотрите документы для QueryDict с. Короткий ответ, что это подкласс dict, который изменяет способ получения предметов, так что copy['text'] вернет значение last в списке значений, связанных с 'text'. Поскольку они не переопределили pop, он вернет весь список.

Вы можете использовать .getlist, чтобы получить список, связанный с определенным значением:

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

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

Причина этого в том, что некоторые элементы HTML будут возвращать несколько значений для одного ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...