Задать вопрос
@sazhyk

Как осилить словари?

Помогите осилить питонячьи словари.
Вот есть у меня такой список
>>> a = ['1', '1', '1', '1', '1']
И ещё такой
>>> b = ['q', 'w', 'e', 'r', 't', 'y']
Теперь мне надо их объединить в один словарь
>>> new_dict = dict(zip(a, b))
И
>>> new_dict
{'1': 't'}

Объясните пожалуйста на пальцах, как мне быть, если мне необходимо хранить несколько пар ключ:значение, где ключ может совпадать у нескольких пар?
Может в питоне существуют другие способы хранить такие данные?
  • Вопрос задан
  • 348 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 2
adugin
@adugin Куратор тега Python
Вариант #1 - реализовать через collections.defaultdict:
from collections import defaultdict

keys = ['1', '1', '1', '2', '2', '3']
vals = ['q', 'w', 'e', 'r', 't', 'y']

d = defaultdict(list)
for key, value in zip(keys, vals):
    d[key].append(value)

Вариант #2 - без defaultdict, но эквивалентен его поведению:
d = dict()
for key, value in zip(a, b):
    d.setdefault(key, []).append(value)

Вариант #3 - использовать MultiDict.
Ответ написан
Комментировать
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Так, что-ли?
>>> a = ['1', '1', '1', '1', '1', '2']
>>> b = ['q', 'w', 'e', 'r', 't', 'y', 'x']
>>> res = {}
>>> for im in enumerate(a):
...    if not im[1] in res.keys():
...       res[im[1]] = [b[im[0]]]
...    else:
...       res[im[1]].append(b[im[0]])
... 
>>> res
{'1': ['q', 'w', 'e', 'r', 't'], '2': ['y']}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы