如何找出Python字典中值(列表)相同的键的分组
按值分组字典中的键
给定如下Python字典,我们需要把值(列表)相同的键进行分组,忽略只有单个键对应的值,最终返回分组后的列表:
example_dict = {'list_1': [1, 2, 'x'], 'list_2':[1, 3, 'x'], 'list_3' : [1, 2, 'x'], 'list_4': [1, 2, 'd'], 'list_5': [1, 3, 'x'] }
预期输出:
[['list_1', 'list_3'], ['list_2','list_5']]
解决方法
核心思路是利用字典键的可哈希特性,把不可哈希的列表转换成元组作为分组依据,再收集对应的原字典键:
- 导入
collections.defaultdict简化分组操作; - 遍历原字典,将每个值(列表)转为元组作为分组键,把对应的原字典键加入该键的列表中;
- 过滤掉仅包含单个键的分组,得到最终结果。
完整代码
from collections import defaultdict example_dict = {'list_1': [1, 2, 'x'], 'list_2':[1, 3, 'x'], 'list_3' : [1, 2, 'x'], 'list_4': [1, 2, 'd'], 'list_5': [1, 3, 'x'] } grouped = defaultdict(list) for key, val in example_dict.items(): # 列表转元组,生成可哈希的分组键 grouped[tuple(val)].append(key) # 仅保留包含多个键的分组 result = [g for g in grouped.values() if len(g) > 1] print(result)
运行后即可得到符合预期的分组结果。
内容的提问来源于stack exchange,提问作者Marketa
相关产品推荐
相关产品推荐

