Python3如何将键值交替的列表转换为目标字典结构
Python读取键值对文本转字典实现
待处理的源文本格式如下:
firstval="myval" secondval="myotherval"
初始编写的处理逻辑是先把内容拆分到列表,最终得到了键值交替的扁平列表:
values = ["firstval", "myval", "secondval", "myotherval"]
需要将该列表转换为键值对应的字典结构,目标格式为:
values = { "firstval": "myval", "secondval": "myotherval" }
转换方法
针对交替存储键、值的扁平列表,有两种简便实现方式,还可以顺手清理掉值两侧的双引号:
- 字典推导式实现:按步长2遍历列表,取当前索引位为键、下一位为值
flat_values = ["firstval", '"myval"', "secondval", '"myotherval"'] res = { flat_values[i]: flat_values[i+1].strip('"') for i in range(0, len(flat_values), 2) }
- zip打包实现:用切片分别取出所有键和所有值,打包后直接传入dict构造器,代码更简洁
res = dict( zip( flat_values[::2], [val.strip('"') for val in flat_values[1::2]] ) )
额外优化建议
初始读取代码存在一个小问题:file.readlines()本身就会按行返回内容列表,不需要再调用split("\n")。实际处理时完全不需要先把内容转成扁平列表,逐行读取时直接拆分键值存入字典即可,还能兼容值里包含等号的场景:
res = {} with open("你的文件路径", "r", encoding="utf-8") as f: for line in f: line = line.strip() if not line: continue # split第二个参数传1,代表只拆分第一个等号,避免值里有等号时拆分错误 key, value = line.split("=", 1) res[key] = value.strip('"')
内容的提问来源于stack exchange,提问作者Chateauvisionn
相关产品推荐
相关产品推荐

