(Python)Список в вложенный словарь
Имеется словарь и список :
dict_cost = {'A': {},
'B': {},
'C': {},
'D': {},
}
tariff = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16']
Нужно сделать цикл либо генератор для вот такого результата:
dict_cost = {'A': {1 : 1, 2 : 2, 3 : 3, 4 : 4},
'B': {1 : 5, 2 : 6, 3 : 7, 4 : 8},
'C': {1 : 9, 2 : 10, 3 : 11, 4 : 12},
'D': {1 : 13, 2 : 14, 3 : 15, 4 : 16},
}
Вот мой код:
Branch = ['A', 'B', 'C', 'D']
dict_cost = {'A': {},
'B': {},
'C': {},
'D': {},
}
tariff = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16']
dict_cost = {Branch[n]: tariff[n] for n in range(len(Branch))}
Но генератор выдает вот такое:
{'A': '1', 'B': '2', 'C': '3', 'D': '4'}
Помогите с этим пожалуйста!
Ответы (3 шт):
Автор решения: splash58
→ Ссылка
Давайте извратимся
{l:dict(zip(range(1,5), tariff[i:i+5])) for i, l in zip(range(0, len(tariff)+1, 4), Branch)}
Автор решения: GrAnd
→ Ссылка
n = (len(tariff) - 1) // len(dict_cost) + 1
result_dict = {d: {i:int(t) for i,t in enumerate(tariff[i*n:i*n+n],1)} for i,d in enumerate(dict_cost)}
Автор решения: SergFSM
→ Ссылка
еще вариант, немного длинновато, но зато читабельно:
from itertools import islice
t = iter(tariff)
for d in dict_cost:
dict_cost[d] = dict(enumerate(islice(t,4),1))
результат:
print(dict_cost)
'''
{'A': {1: '1', 2: '2', 3: '3', 4: '4'},
'B': {1: '5', 2: '6', 3: '7', 4: '8'},
'C': {1: '9', 2: '10', 3: '11', 4: '12'},
'D': {1: '13', 2: '14', 3: '15', 4: '16'}}