我的清单:
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'}
我不知道我的名单有多大(名字,选项和价值的数量)。有什么想法吗?
答案 0 :(得分:2)
有list和dict理解:
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 :(得分:1)
假设name始终是一个令牌(同样,不要使用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]
请注意,如果列表格式错误且第一个值不是名称,则会阻塞。