Python如何将SQL查询返回的指定字符串自动解析为目标格式dict?
问题解答
完全可以借助Python内置模块实现,无需手动写复杂的解析逻辑,操作方法如下:
- 首先注意你给出的原始字符串存在笔误:第一个元素
'user_id=c370缺失闭合单引号,实际使用前需要先修正这个格式问题。 - 用
ast.literal_eval把外层的字符串格式的列表直接转成Python原生列表,这个方法是安全的字面值解析工具,不会执行任意代码,比原生eval更可靠。 - 遍历列表中的每一个
key=value格式的字符串,按=拆分键和值,自动处理重复键(比如good_id)的聚合,同时可以根据需求把数值类的value转成int类型。
实现代码示例
import ast from collections import defaultdict # 修正笔误后的原始SQL返回字符串 raw_str = "['user_id=c370','good_cnt=2','good_id=1999','igoodid=12341','good_id=1111','good_id=1214','good_id=1437']" # 第一步:转成原生列表 item_list = ast.literal_eval(raw_str) # 第二步:聚合生成中间字典 res_dict = defaultdict(list) for item in item_list: k, v = item.split('=', 1) # 尝试转数值类型,转失败则保留字符串 try: v = int(v) except ValueError: pass res_dict[k].append(v) # 第三步:把仅出现一次的键对应的值从列表改成单个值,匹配目标格式 final_dict = {} for k, v in res_dict.items(): final_dict[k] = v[0] if len(v) == 1 else v print(final_dict)
运行后输出结果为:{'user_id': 'c370', 'good_cnt': 2, 'good_id': [1999, 12341, 1111, 1214, 1437], 'igoodid': 12341}
如果不需要保留igoodid字段,额外加一行del final_dict['igoodid']即可。
内容的提问来源于stack exchange,提问作者RazDva
相关产品推荐
相关产品推荐

