Переместить строковые данные из списка в словарь
Нужно написать алгоритм, перемещающий строковые данные из списка в словарь, так что бы не содержащие цифры данные становились ключами, а последующие за ними числа(в виде строк) становились значениями. Вот пример:
a = ['qw', '67.234', 'wr', '87', '76.39212', '14', '17.09843', 'rq', '145.987', '134.98']
b = {'qw': ['67.234'],
'wr': ['87', '76.39212', '14', '17.09843'] ,
'rq': ['145.987', '134.98']
}
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Один из вариантов реализации:
a = ['qw', '67.234', 'wr', '87', '76.39212', '14', '17.09843', 'rq', '145.987', '134.98']
b = {}
for s in a:
try:
x = float(s)
b[k] = b.get(k, [])
b[k].append(s)
except:
k = s
print(b)
Вывод:
{'qw': ['67.234'],
'wr': ['87', '76.39212', '14', '17.09843'],
'rq': ['145.987', '134.98']}
Можно сделать через регулярки. Разные есть варианты, как сделать.
Автор решения: SergFSM
→ Ссылка
вот еще вариант, не самый оптимальный, но вроде как рабочий (пропускает ключи для которых нет значений, ключ TEST в примере):
from itertools import groupby
a = ['qw', '67.234', 'TEST', 'wr', '87', '76.39212', '14', '17.09843', 'rq', '145.987', '134.98']
gr = [list(g) for _,g in groupby(a, str.isalpha)]
b = {k[-1]:g for k, g in zip(gr[::2],gr[1::2])}
вывод:
{'qw': ['67.234'],
'wr': ['87', '76.39212', '14', '17.09843'],
'rq': ['145.987', '134.98']}