对list中的dict对象去重
对list中的dict对象去重
方案1:
-
依据是dict对象的某个键值对的value
-
原理:利用dict健的不可重复行
-
结果:保留最新的数据
def unique_list(list_obj, primary_key): list_obj_dict = {i.get(primary_key): i for i in list_obj} list_obj = list(list_obj_dict.values()) return list_obj demo = [{'name': '张三', 'age': 14}, {'name': '李四', 'age': 15}, {'name': '王五', 'age': 16}, {'name': '小明', 'age': 16}, {'name': '小王', 'age': 14}] print(unique_list(demo, 'age')) # [{'name': '小王', 'age': 14}, {'name': '李四', 'age': 15}, {'name': '小明', 'age': 16}]
方案2:
-
原理:使用set集合去重,首先将dict通过json模块转为字符串,然后即可去重
-
结果:去除完全相同的dict对象
import json def unique_list(list_obj): list_obj = list(set([json.dumps(i, ensure_ascii=False) for i in list_obj])) return list_obj demo = [{'name': '张三', 'age': 14}, {'name': '李四', 'age': 15}, {'name': '王五', 'age': 16}, {'name': '小明', 'age': 16}, {'name': '小王', 'age': 14}] print(unique_list(demo)) # ['{"name": "王五", "age": 16}', '{"name": "李四", "age": 15}', '{"name": "小明", "age": 16}', '{"name": "小王", "age": 14}', '{"name": "张三", "age": 14}']
note
- 相比较:方案1效率高,方案2可以去重完全相同的dict对象,侧重点不同