Задать вопрос
@kripton3000
Бекенд- и немного фронтенд-разработчик

Как создать словарь Python?

Имею данные:

data = """
rules:      evdev
model:      pc105
layout:     us,ru
variant:    ,
options:    grp:alt_shift_toggle,grp_led:scroll
"""


хочу получить словарь
{'layout': ‘us,ru’,
‘model’: ‘pc105’,
‘options’: ‘grp:alt_shift_toggle,grp_led:scroll’,
‘rules’: ‘evdev’,
‘variant’: ‘,’}

Делаю так:

dict((a, b.strip()) for a, b in
                 (item.split(":") for item in
                  data.splitlines()))


Получаю:
dict((a, b.strip()) for a, b in
ValueError: too many values to unpack

ЧЯДНТ?
  • Вопрос задан
  • 3172 просмотра
Подписаться 4 Оценить Комментировать
Решения вопроса 3
@theaidem
Мож дело в куче двоеточий "options: grp:alt_shift_toggle,grp_led:scroll"
Хотя вот:
d = {}
for x in data.splitlines():
    x = x.split(': ')
    if x[0]: d[x[0]] = x[1]
print d

Ооочень грязно но работает!))
Ответ написан
tsarevfs
@tsarevfs
C++ developer
можно в лоб.
for line in lines:
   splitter = line.index(':')
   d[ line[ : splitter] ]  = line[ splitter :  ].strip()
Ответ написан
Комментировать
adugin
@adugin Куратор тега Python
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

data = """
rules:      evdev
model:      pc105
layout:     us,ru
variant:    ,
options:    grp:alt_shift_toggle,grp_led:scroll
"""

items = dict([map(lambda s: s.strip(), line.split(':', 1)) for line in data.split('\n') if line])

print items
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
adugin
@adugin Куратор тега Python
Что касается ошибки, вы забыли одну закрывающую скобку:

dict((a, b.strip()) <-- добавить скобку здесь

Что, впрочем, не поможет, т.к. синтакс вообще неправильный :)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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