@tekleworm

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

Есть два списка, например список 1:
'6.95',
 '6.95',
 '6.95',
 '6.95',
 '6.96',
 '6.96',
 '6.96',
 '6.96',
 '6.96',
 '6.96',
 '6.96',
 '6.96',
 '6.96',
 '6.96',
 '6.96',
 '6.96',

и список 2:
'0/4',
 '0/10',
 '0/6',
 '0/18',
 '0/9',
 '0/24',
 '0/22',
 '0/11',
 '0/14',
 '0/7',

Количество элементов одно и тоже. Но в списке один элементы повторяются, и когда я делаю dict[str(list1)] = str(list2)

то когда повторяется элемент из списка 1 то, значение перезаписывается. Как сделать так, что бы получить такую структуру.
'6.95':  '0/4', '0/10', '0/6', '0/18','0/9','0/24'
 '6.96'; '0/22','0/11', '0/14','0/7',

или же
'6.95': '0/4',
'6.95':  '0/10',
'6.95':  '0/18'
 '6.96':  '0/22',
 '6.96': '0/11'
и тд
  • Вопрос задан
  • 194 просмотра
Решения вопроса 3
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Вариант на случай, когда для не повторяющихся ключей значения не нужно заворачивать в список:
d = {}
for k, v in zip(list1, list2):
    if k in d:
        if not isinstance(d[k], list):
            d[k], t = [], d[k]
            d[k].append(t)
        d[k].append(v)
    else:
        d[k] = v
Ответ написан
@sazhyk
Я уже писал такой вопрос. Посмотрите, может найдете решение.
Ответ написан
Комментировать
adugin
@adugin Куратор тега Python
lst_keys = ['6.95', '6.95', '6.95', '6.95', '6.96', '6.96', '6.96', '6.96', '6.96', '6.96']
lst_vals = ['0/4', '0/10', '0/6', '0/18',  '0/9', '0/24', '0/22', '0/11', '0/14', '0/7']

d = dict()
for key, val in zip(lst_keys, lst_vals):
    d.setdefault(key, []).append(val)

print(d)

Или ещё эффективнее - эксепшн сработает ровно 2 раза, не надо каждый раз делать проверки:
for key, val in zip(lst_keys, lst_vals):
    try:
        d[key].append(val)
    except KeyError:
        d[key] = [val]

С использованием defaultdict:
from collections import defaultdict

d = defaultdict(list)
for key, val in zip(lst_keys, lst_vals):
    d[key].append(val)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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