如何将Python字典列表转换为按表分类的去重逗号分隔字符串
解决方案
首先纠正你代码里的问题:Message是列表类型,不是字典,所以不能调用.items()方法,这是你无法继续的核心原因。
下面是两种可行的实现方式,都能完成分组、去重并生成目标字符串:
方法1:使用普通字典手动分组
# 你的原始数据 Message = [ {"table_name": "sec_sp", "column_name": "field_1"}, {"table_name": "sec_sp", "column_name": "field_2"}, {"table_name": "sec_si", "column_name": "field_3"}, {"table_name": "sec_si", "column_name": "field_4"}, {"table_name": "sec_sp", "column_name": "field_5"}, {"table_name": "sec_sc", "column_name": "field_6"}, {"table_name": "sec_sc", "column_name": "field_7"}, # 可添加重复字段测试去重效果 {"table_name": "sec_sp", "column_name": "field_1"} ] # 初始化空字典用于分组 grouped = {} for item in Message: table = item["table_name"] field = item["column_name"] # 表名不在字典里时,创建空集合(自动去重) if table not in grouped: grouped[table] = set() # 添加字段到对应集合 grouped[table].add(field) # 转换为逗号分隔的字符串,提取表名后缀作为变量名 sp_list = ",".join(sorted(grouped["sec_sp"])) si_list = ",".join(sorted(grouped["sec_si"])) sc_list = ",".join(sorted(grouped["sec_sc"])) # 输出结果 print(f"sp_list = \"{sp_list}\"") print(f"si_list = \"{si_list}\"") print(f"sc_list = \"{sc_list}\"")
方法2:使用collections.defaultdict简化代码
defaultdict可以自动处理键不存在的情况,代码更简洁:
from collections import defaultdict # 原始数据同上,省略... # 初始化默认值为集合的字典 grouped = defaultdict(set) for item in Message: # 直接添加字段,无需判断键是否存在 grouped[item["table_name"]].add(item["column_name"]) # 生成目标字符串 sp_list = ",".join(sorted(grouped["sec_sp"])) si_list = ",".join(sorted(grouped["sec_si"])) sc_list = ",".join(sorted(grouped["sec_sc"])) # 输出 print(f"sp_list = \"{sp_list}\"") print(f"si_list = \"{si_list}\"") print(f"sc_list = \"{sc_list}\"")
关键说明:
- 去重逻辑:用
set(集合)存储字段,自动忽略重复值,用sorted()可保证字段顺序和示例一致。 - 分组逻辑:以
table_name为键,把同表的字段归集到一起。 - 字符串拼接:用
str.join()方法把集合/列表里的字段用逗号连接成字符串。
执行后输出结果:
sp_list = "field_1,field_2,field_5" si_list = "field_3,field_4" sc_list = "field_6,field_7"
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

