如何按list类型的unit值分组聚合service值?(Python字典列表处理)
解决方案
要实现按unit的内容分组,收集对应的service列表,核心是解决列表无法作为字典键的问题,同时调整分组依据。以下是可行的代码:
data = [{"service":"1","unit":["A","B"]},{"service":"2","unit":["A","B"]},{"service":"1","unit":["C"]}] # 初始化分组字典,用元组形式的unit作为键 grouped = {} for item in data: # 将unit列表转为元组(可哈希,能作为字典键) unit_key = tuple(item['unit']) # 向对应键的列表中添加service grouped.setdefault(unit_key, []).append(item['service']) # 转换为期望的输出格式 output = [{"service": services, "unit": list(unit)} for unit, services in grouped.items()] print(output)
代码说明
- 处理列表作为键的问题:列表是可变类型,不能直接作为字典的键,因此把
unit列表转换成元组(不可变、可哈希)作为分组标识。 - 分组逻辑:遍历原始数据时,以元组形式的
unit为键,将对应的service逐个添加到列表中,实现相同unit下的service收集。 - 格式转换:最后把字典的键(元组)转回列表,和收集到的
service列表组合成目标字典结构。
运行代码后,输出结果与期望一致:
[{'service': ['1', '2'], 'unit': ['A', 'B']}, {'service': ['1'], 'unit': ['C']}]
内容的提问来源于stack exchange,提问作者Jennifer Therese
相关产品推荐
相关产品推荐

