列表切片与嵌套列表转字典:如何为无描述的列表项填充空描述值
解决方法:补全空描述并转换为字典列表
首先,我们来搞定列表里缺少描述的项,确保每个子元素都能有「名称+描述」的结构(没描述就补空字符串),再转成你要的字典格式。
步骤1:补全空描述
你现在用split('-', 1)分割元素,但遇到没有-的项时,结果只会是单元素列表。我们可以在分割后检查长度,不足2个元素就手动补上空字符串:
lst = [ 'Macbook Air - 13inch Model', 'Iphone13 - Max Pro 65GB Model', 'Airpod2' ] new_lst = [] for item in lst: parts = item.split('-', 1) # 只有名称没有描述时,补上空字符串 if len(parts) == 1: parts.append('') new_lst.append(parts) print(new_lst)
这段代码的输出正好是你期望的:
[['Macbook Air ', ' 13inch Model'], ['Iphone13 ', ' Max Pro 65GB Model'], ['Airpod2', '']]
嫌麻烦的话,也可以用一行式的简洁写法:
new_lst = [item.split('-', 1) + ['']*(2 - len(item.split('-',1))) for item in lst]
步骤2:转换为字典列表
接下来把每个子列表转成单个键值对的字典,用列表推导式就能轻松搞定:
dict_list = [{parts[0]: parts[1]} for parts in new_lst] print(dict_list)
输出就是你想要的最终格式:
[{'Macbook Air ': ' 13inch Model'}, {'Iphone13 ': ' Max Pro 65GB Model'}, {'Airpod2': ''}]
一步到位的完整代码
要是想少写几行,也可以把两个步骤合并成一个推导式:
lst = [ 'Macbook Air - 13inch Model', 'Iphone13 - Max Pro 65GB Model', 'Airpod2' ] dict_list = [{parts[0]: parts[1] if len(parts)>1 else ''} for parts in (item.split('-',1) for item in lst)] print(dict_list)
这样运行后直接就能得到目标结果啦。
内容的提问来源于stack exchange,提问作者Koji E




