Итерация по словарю с дубликатами ключей - PullRequest
1 голос
/ 30 сентября 2019

У меня есть словарь

params = ImmutableMultiDict([('dataStore', 'tardis'), ('symbol', '1'), ('symbol', '2')])

Я хочу иметь возможность перебирать словарь и получать список всех значений и их ключей. Однако, когда я пытаюсь это сделать, он получает только первую пару значений символов и игнорирует другую.

for k in params:
    print(params.get(k))

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Если я вас правильно понимаю, вы хотите перебирать все ключи, включая дубликаты, верно? Тогда вы можете использовать метод items(multi=False) с multi, установленным на True.

Документация:

элементов ( multi = False )

Возвращает итератор из (key, value) пар.

Параметры : multi - если установлено значение True возвращенный итератор будет иметь пару для каждого значения каждого ключа. В противном случае он будет содержать только пары для первого значения каждого ключа.

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

2 голосов
/ 30 сентября 2019

Если вы прочитаете документы для MultiDict, из которых ImmutableMultiDict получено, вы увидите:

Он ведет себя как обычный dict, поэтому все функции dictвернет первое значение только в том случае, если найдено несколько значений для одного ключа.

Однако API включает в себя дополнительный метод .getlist для этой цели. В документации также есть пример его использования:

>>> d = MultiDict([('a', 'b'), ('a', 'c')])
# ...
>>> d.getlist('a')
['b', 'c']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...