如何用Python从包含KeyVal对象的列表中提取键值对生成字典
符合Python风格的实现方法
根据你的场景,分两种常见情况处理:
情况1:已经持有header列表(包含KeyVal实例)
如果header是已经存在的列表,其中每个元素都是带有key和value属性的KeyVal对象,直接用字典推导式即可,这是最Pythonic的写法:
result = {kv.key: kv.value for kv in header}
情况2:仅持有字符串形式的内容
如果只有原始字符串,需要先解析字符串再生成字典,推荐两种安全高效的方式:
方式A:用ast模块解析(推荐,支持复杂场景)
ast模块能安全解析Python风格的字面量结构,避免正则的局限性:
import ast # 原始字符串 s = "header=[KeyVal(key='abc',value='123'),KeyVal(key='xyz',value='456')]" # 提取列表部分的内容 list_str = s.split('=', 1)[1] # 定义与字符串中匹配的KeyVal类,让ast能正确实例化 class KeyVal: def __init__(self, key, value): self.key = key self.value = value # 解析得到KeyVal实例的列表 header = ast.literal_eval(list_str) # 生成目标字典 result = {kv.key: kv.value for kv in header}
方式B:用正则表达式提取(适合简单固定格式)
如果字符串格式固定且简单,正则表达式更轻量:
import re s = "header=[KeyVal(key='abc',value='123'),KeyVal(key='xyz',value='456')]" # 匹配每个KeyVal中的key和value值 key_value_pairs = re.findall(r"KeyVal\(key='(.*?)',value='(.*?)'\)", s) # 直接将元组列表转为字典 result = dict(key_value_pairs)
内容的提问来源于stack exchange,提问作者Ravi Daga
相关产品推荐
相关产品推荐

