@kiosok

Как преобразовать список в словари?

Подскажите как преобразовать список в словари. Пример списка:
list = [1, a,b,c,d, 2, a,b,c,d, 3, a,b,c,d]
Что я хочу получить:
list = { 1 : {a : b, c : d}
         2 : {a : b, c : d}
         3 : {a : b, c : d} }
  • Вопрос задан
  • 1359 просмотров
Пригласить эксперта
Ответы на вопрос 2
drygdryg
@drygdryg
Python-разработчик
Например, с помощью генератора словаря (dict comprehension) и range:
a, b, c, d = 'abcd'
lst = [1, a, b, c, d, 2, a, b, c, d, 3, a, b, c, d]
result = {lst[i]: {lst[i+1]: lst[i+2], lst[i+3]: lst[i+4]} for i in range(0, len(lst), 5)}
print(result)  # {1: {'a': 'b', 'c': 'd'}, 2: {'a': 'b', 'c': 'd'}, 3: {'a': 'b', 'c': 'd'}}

или с помощью цикла:
result = {}
for i in range(0, len(lst), 5):
    result[lst[i]] = {lst[i+1]: lst[i+2], lst[i+3]: lst[i+4]}
print(result)  # {1: {'a': 'b', 'c': 'd'}, 2: {'a': 'b', 'c': 'd'}, 3: {'a': 'b', 'c': 'd'}}
Ответ написан
Комментировать
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Тут не поощряется публикация заданий без попытки самостоятельного решения.
В ответе тоже не буду давать вам готового решения, поскольку это "медвежья услуга".

Могу дать подсказку как решать вашу задачу.
Во-первых, следует отметить, что во втором, заблокированном вашем вопросе, формат входных данных отличается от озвученного здесь. Нужно тщательнее и аккуратнее приводить примеры.
Любую относительно сложную задачу нужно разбивать на блее простые подзадачи и решать их отдельно и изолированнно.

В данном случае входной список вам следует сначала разделить на набор отдельных списков, где в каждом первым элементом будет ваш идентификатор, а дальше список ключей и значений. Это можно оформить отдельной функцией. В том, втором вопросе было видно, что разделить входную последовательность можно, например, по значению 'ID'. В примерах, приведённых здесь, нет такихэлементов, поэтому тут придётся ориентироваться на тип или четность...
Когда у вас будет последовательность списков, первый элемент - ключ всего списка, легко отделить слайсом, а весь хвост можно легко превратить в пары ключ-значение вот таким вот способом:
In [1]: lst=[1,2,3,4,5,6]

In [2]: dict(zip(itr:=iter(lst), itr))
Out[2]: {1: 2, 3: 4, 5: 6}


Ну а если вы не сообразите, как увязать воедино все приведенные мной тут примеры, то вам еще рано решать такие задачи, нужно сделать пару шагов назад и осваивать базовые основы языка.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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