python去重列表中相同的字典元素
一.知识点
data_list = [{“a”: 1, “b”: 2}, {“a”: 2, “b”: 3}, {“a”: 1, “b”: 2}, {“a”: 3, “b”: 4}, {“a”: 2, “b”: 3}, {“a”: 1, “b”: 2}]
萌新会犯的错误:使用集合来去重
print(set(data_list))
会报错,因为字典是不可哈希的类型,不能直接用于集合的创建。如果要将字典元素去重,可以先将字典转化为元组再使用集合去重。
在Python中,集合是可变的数据类型,因此不是可哈希的。集合的元素必须是可哈希的类型。如果集合中有不可哈希的元素,例如列表或字典,会引发TypeError错误。
在 Python 中,可哈希的类型包括:
不可变类型:例如数字、字符串、元组等,它们一旦创建,其值就不能被修改;
可变类型但是不包含可变类型的元素:例如 frozenset 等;
用户自定义的对象,只要实现了 hash 和 eq 方法,使得对象在比较时可哈希即可。
需要注意的是,可哈希的类型必须实现了 hash 方法,使得相同的值具有相同的哈希值,这是哈希表能够正确工作的前提。
二.代码
|代码1
那就创建一个新列表,循环遍历嵌套着字典数据的列表,判断字典元素是否存在,若不在,就添加进去
def list_dict_duplicate_removal1(data_list):
unique_list = []
for data in data_list:
if data not in unique_list:
unique_list.append(data)
return unique_list
|问题
当我在编写项目时,数据集比较大,有19万多行,如下图,元素即字典的键值对数量有14对
|代码2
当数据集较大时,每次都需要遍历整个结果列表,查看当前字典是否已经存在于结果列表中,因此时间复杂度很高,导致程序运行变慢。一个更好的解决方案是使用哈希表来快速判断字典是否已经存在于结果列表中,使用哈希表实现去重的示例代码:
def