Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 2, 2017 12:36:25

kropotkinmahno
Зарегистрирован: 2016-11-12
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование в словарь

Добрый день!
Помогите,пожалуйста, в следующем вопросе:
со стандартного ввода считывается строка вида: “bookname1 23 bookname2 20 bookname3 35”
нужно преобразовать в словарь вида:
{'bookname1' : 23, ‘bookname2’ : 20, ‘bookname3’ : 35}

Офлайн

#2 Апрель 2, 2017 12:59:12

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Преобразование в словарь

 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}

Офлайн

#3 Апрель 2, 2017 13:08:08

kropotkinmahno
Зарегистрирован: 2016-11-12
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование в словарь

Спасибо за оперативность, но почему то выводит {'bookname1': 35, ‘bookname2’: 35, ‘bookname3’: 35}
везде значение одно и тоже

Офлайн

#4 Апрель 2, 2017 13:11:06

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Преобразование в словарь

kropotkinmahno
Спасибо за оперативность, но почему то выводит {'bookname1': 35, ‘bookname2’: 35, ‘bookname3’: 35}везде значение одно и тоже
Виноват, слишком увлекся оперативностью.

Офлайн

#5 Апрель 2, 2017 13:13:13

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Преобразование в словарь

немного скорректированный код 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)

Офлайн

#6 Апрель 2, 2017 13:19:24

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Преобразование в словарь

Зачем индексы для последовательного получения?
iter решает проблему.

 #
a = iter(s.split())
dct = {k:int(v) for k, v in zip(a, a)}

P.S. Я за регекспы, если что

Отредактировано 4kpt_V (Апрель 2, 2017 13:19:56)

Офлайн

#7 Апрель 2, 2017 13:19:48

kropotkinmahno
Зарегистрирован: 2016-11-12
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование в словарь

Спасибо огромное!

Офлайн

#8 Апрель 2, 2017 13:21:41

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Преобразование в словарь

Вот так уже работает:

  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}
PS: Пока исправлял, не увидел, что уже появились решения Romissevd и 4kpt_V.

Отредактировано old_monty (Апрель 2, 2017 13:27:01)

Офлайн

#9 Апрель 2, 2017 13:28:57

kropotkinmahno
Зарегистрирован: 2016-11-12
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование в словарь

чем больше разных вариантов, тем лучше для новичка
Спасибо всем!
Если есть еще варианты, можете писать

Офлайн

#10 Апрель 2, 2017 14:07:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9993
Репутация: +  857  -
Профиль   Отправить e-mail  

Преобразование в словарь

  
>>> 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version