Как создать словарь из списка цифр?
Цель: Создать словарь на основе списка. Разделитель число от 265 до 265, это отрезок из которого формируется новый словарь.
[**265**, 210, 20, 10, 13, 2, 4, 2, 8, 6, 360, 230, 9, 5, 12, 2, 10, 10, 36, 14, 64, 62, 7, 1, 72, 14, **265**, 211, 20, 11, 13, 3, 4, 3, 8, 3, 360, 51, 9, 6, 12, 3, 10, 1, 36, 15, 64, 27, 7, 7, 72, 51]
Подскажите пожалуйста, как можно преобразовать список в словарь, где
{'265': 210, '20':10,....}
Ответы (3 шт):
Автор решения: Zhihar
→ Ссылка
в примере никак не показан разделитель (что с ним делать)
без этого код может выглядеть так:
arr = [265, 210, 20, 10, 13, 2, 4, 2, 8, 6, 360, 230, 9, 5, 12, 2, 10, 10, 36, 14, 64, 62, 7, 1, 72, 14,]
res = dict((str(arr[i]), arr[i+1]) for i in range(0, len(arr), 2))
print(res)
или так (так покороче):
res = dict(zip(map(str, arr[::2]), arr[1::2]))
Автор решения: CrazyElf
→ Ссылка
Если только два таких разделителя, то примерно так:
lst = [265, 210, 20, 10, 13, 2, 4, 2, 8, 6, 360, 230, 9, 5, 12, 2, 10, 10, 36, 14, 64, 62, 7, 1, 72, 14, 265, 211, 20, 11, 13, 3, 4, 3, 8, 3, 360, 51, 9, 6, 12, 3, 10, 1, 36, 15, 64, 27, 7, 7, 72, 51]
i1 = lst.index(265) + 1
i2 = lst.index(265, i1)
lst12 = lst[i1:i2]
d = dict(zip(lst12[::2],lst12[1::2]))
print(d)
Вывод:
{210: 20, 10: 36, 2: 10, 6: 360, 230: 9, 5: 12, 14: 64, 62: 7, 1: 72}
При этом элемент списка 14 не попал в словарь, потому что у него не было пары, чтобы образовать ключ: значение.
Если разделителей больше - ну сделать цикл на основе данного кода, взяв lst = lst[i2+1:].
Автор решения: vadim vaduxa
→ Ссылка
def add(dt):
while True:
key = yield
value = yield
dt[key] = value
lst = [31, 265, 210, 20, 10, 265, 211, 21, 11, 1, 2, 3, 265, 211, 22, 12, 12345]
res = []
for i in lst:
if i == 265:
res.append({})
a = add(res[-1])
next(a)
try: a.send(i)
except NameError: continue
print(res) # [{265: 210, 20: 10}, {265: 211, 21: 11, 1: 2}, {265: 211, 22: 12}]