对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对象,侧重点不同
posted @ 2022-03-28 07:55  疯狂列表推导式  阅读(408)  评论(0编辑  收藏  举报