Как сделать словарь из списка - PullRequest
0 голосов
/ 07 марта 2012

Мой список:

list = ['name1', 'option1.1 value1.1', 'option1.2 value1.2', 'name2', 'option2.1 value2.1', 'option2.2 value2.2', 'option2.3 value2.3']

И я хочу создать словарь так:

dict = {'name1':{'option1.1':'value1.1', 'option1.2':'value1.2'}, 'name2':{'option2.1': 'value2.1', 'option2.2':'value2.2', 'option2.3':'value2.3'}

Я не знаю, насколько велик мой список (количество имен, опций и значений). Есть идеи?

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

со списком и пониманием слов:

id=[b[0] for b in enumerate(lst) if 'name' in b[1]]+[None]
d={lst[id[i]]:dict(map(str.split,lst[id[i]+1:id[i+1]])) for i in range(len(id)-1)}

Ваш оригинальный список был назван lst

Возможно, это не так легко читается, как ответ @sr22222, но, возможно, это быстрее и дело вкуса.

1 голос
/ 07 марта 2012

Предполагая, что имя всегда будет одним токеном (также не используйте list и dict в качестве имен переменных, поскольку они являются встроенными):

result = {}
for val in my_list:
    split_val = val.split()
    if len(split_val) == 1:
        last_name = split_val[0]
        result[last_name] = {}
    else:
        result[last_name][split_val[0]] = split_val[1]

Обратите внимание, что это будет подавлять, если список плохоотформатирован и первое значение не является именем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...