Форум сайта python.su
Добрый день!
Помогите,пожалуйста, в следующем вопросе:
со стандартного ввода считывается строка вида: “bookname1 23 bookname2 20 bookname3 35”
нужно преобразовать в словарь вида:
{'bookname1' : 23, ‘bookname2’ : 20, ‘bookname3’ : 35}
Офлайн
s = "bookname1 23 bookname2 20 bookname3 35" lst = s.split() values = lst[1::2] keys = lst[::2] dct = {k:int(v) for k in keys for v in values}
Офлайн
Спасибо за оперативность, но почему то выводит {'bookname1': 35, ‘bookname2’: 35, ‘bookname3’: 35}
везде значение одно и тоже
Офлайн
kropotkinmahnoВиноват, слишком увлекся оперативностью.
Спасибо за оперативность, но почему то выводит {'bookname1': 35, ‘bookname2’: 35, ‘bookname3’: 35}везде значение одно и тоже
Офлайн
немного скорректированный код old_monty
s = "bookname1 23 bookname2 20 bookname3 35" lst = s.split() values = lst[1::2] keys = lst[::2] dct = {k:int(v) for k, v in zip(keys,values)} print(dct)
Офлайн
Зачем индексы для последовательного получения?
iter решает проблему.
# a = iter(s.split()) dct = {k:int(v) for k, v in zip(a, a)}
Отредактировано 4kpt_V (Апрель 2, 2017 13:19:56)
Офлайн
Спасибо огромное!
Офлайн
Вот так уже работает:
s = "bookname1 23 bookname2 20 bookname3 35" lst = s.split() values = lst[1::2] keys = lst[::2] tpl = zip(keys, values) dct = {k:int(v) for k, v in tpl}
Отредактировано old_monty (Апрель 2, 2017 13:27:01)
Офлайн
чем больше разных вариантов, тем лучше для новичка
Спасибо всем!
Если есть еще варианты, можете писать
Офлайн
>>> s = 'bookname1 23 bookname2 20 bookname3 35' >>> >>> lst = s.split() >>> dct = dict(zip(lst[::2], map(int, lst[1::2]))) >>> dct {'bookname3': 35, 'bookname2': 20, 'bookname1': 23} >>>
>>> s = 'bookname1 23 bookname2 20 bookname3 35' >>> >>> it = iter(s.split()) >>> dct = dict(zip(it, map(int, it))) >>> dct {'bookname2': 20, 'bookname3': 35, 'bookname1': 23} >>>
Отредактировано py.user.next (Апрель 2, 2017 14:08:35)
Офлайн