如何安全查找Python字典中的重复值并返回对应的键列表
Python 实现逻辑
因为列表属于不可哈希类型,无法直接作为分组统计的键,所以我们先将列表类型的value转为可哈希的元组,再按该值对原字典的key做分组,最后筛选出元素数量≥2的分组就是有重复value的key集合。
代码实现
def get_duplicate_keys(raw_dict): grouped = {} for k, v in raw_dict.items(): # 列表转元组获得可哈希的标识 hash_key = tuple(v) grouped.setdefault(hash_key, []).append(k) # 过滤出有重复值的分组 duplicate_key_groups = [keys for keys in grouped.values() if len(keys) > 1] # 示例只需要第一组重复的key,多组重复可直接返回duplicate_key_groups return duplicate_key_groups[0] if duplicate_key_groups else [] # 测试运行 if __name__ == "__main__": test_data = { "50": [2110,1,94], "51": [2105,1,95], "52": [2105,1,85], "53": [2105,1,95], } print(get_duplicate_keys(test_data)) # 输出:['51', '53']
注意事项
- 如果字典值存在嵌套列表/字典等不可哈希的元素,可以先把value序列化为JSON字符串作为哈希键,替换
tuple(v)为json.dumps(v, sort_keys=True)即可,需要提前导入json模块 - 如果需要获取所有重复的key分组,直接返回
duplicate_key_groups即可,会返回所有存在重复值的key列表集合 - 该实现时间复杂度为O(n),n为字典的键值对数量,运行效率较高
内容的提问来源于stack exchange,提问作者ovntatar
相关产品推荐
相关产品推荐

