Python中按类型分组合并字典列表的代码逻辑咨询
字典列表分组合并方案
原始输入
original_list = [ {'fruit':'Apple', 'Color':'red', 'weight':'10'}, {'fruit':'Banana', 'Color':'yellow', 'weight':'20'}, {'fruit':'Kiwi', 'Color':'Green', 'weight':'15'}, {'Veggie':'Onion', 'Color':'white', 'price':'10'}, {'Veggie':'Cabbage', 'Color':'Light Green', 'price':'30'}, {'Leafy':'Spinach', 'Color':'Dark Green', 'quantity':'30'} ]
目标输出
target_list = [ {'Fruit':['Apple', 'Banana', 'Kiwi'], 'Color':['red', 'yellow', 'Green'], 'weight':['10','20','15']}, {'Veggie':['Onion', 'Cabbage'], 'Color':['white', 'Light Green'], 'price':['10','30']}, {'Leafy':['Spinach'], 'Color':['Dark Green'], 'quantity':['30']} ]
实现思路
- 核心是按字典的「类型键」分组:每个原始字典里,除了
Color外,都有一个独有的「类型标识键」(比如fruit、Veggie、Leafy),以此作为分组依据。 - 用临时字典存储分组结果,键为处理后的类型键(首字母大写),值为该组的合并字典(每个键对应一个列表)。
- 遍历原始列表,将每个字典的键值对追加到对应分组的列表中,同时统一类型键的大小写格式。
代码实现
original_list = [ {'fruit':'Apple', 'Color':'red', 'weight':'10'}, {'fruit':'Banana', 'Color':'yellow', 'weight':'20'}, {'fruit':'Kiwi', 'Color':'Green', 'weight':'15'}, {'Veggie':'Onion', 'Color':'white', 'price':'10'}, {'Veggie':'Cabbage', 'Color':'Light Green', 'price':'30'}, {'Leafy':'Spinach', 'Color':'Dark Green', 'quantity':'30'} ] # 临时字典,用于按类型键分组存储结果 grouped_dict = {} for item in original_list: # 提取当前字典的类型键(排除Color) type_key = next(k for k in item.keys() if k != 'Color') # 处理类型键首字母大写(比如fruit → Fruit) formatted_type = type_key.capitalize() # 如果该类型还未初始化分组,创建空列表结构 if formatted_type not in grouped_dict: # 为当前组的所有键初始化空列表 grouped_dict[formatted_type] = {key: [] for key in item.keys()} # 替换类型键为大写后的版本 grouped_dict[formatted_type][formatted_type] = grouped_dict[formatted_type].pop(type_key) # 将当前字典的所有值追加到对应分组的列表中 for key, value in item.items(): # 匹配正确的键名(类型键用大写后的版本) target_key = formatted_type if key == type_key else key grouped_dict[formatted_type][target_key].append(value) # 把分组字典的取值转换为列表,得到最终结果 final_result = list(grouped_dict.values()) print(final_result)
代码说明
- 提取类型键:通过
next(k for k in item.keys() if k != 'Color')快速定位每个字典的类型标识键,因为每个字典除了Color外只有一个唯一类型键。 - 初始化分组:首次遇到某类型键时,为该组的所有键创建空列表,并将类型键替换为首字母大写的格式。
- 追加数据:遍历当前字典的键值对,把值追加到对应分组的列表中,确保类型键使用统一的大写格式。
- 生成结果:将分组字典的所有值提取为列表,就得到了目标格式的结果。
内容的提问来源于stack exchange,提问作者softwareDeveloperInProgress
相关产品推荐
相关产品推荐

