当前位置 博文首页 > 炫云云:python 去除字典列表中的重复字典

    炫云云:python 去除字典列表中的重复字典

    作者:[db:作者] 时间:2021-09-09 18:47

    第一种:

    li = [{'a': 1}, {'b': 2}, {'a': 1}]
    
    li = [dict(t) for t in set([tuple(d.items()) for d in li])]
    

    结果为:

    [{'a': 1}, {'b': 2}]
    

    第一步把 dict 列表转成 tuple 列表,

    [tuple(d.items()) for d in li])
    
    [(('a', 1),), (('b', 2),), (('a', 1),)]
    

    然后外面加个 set() 去重, 最后把去重后的 tuple set 转成 dict list

    第二种:

    python 字典中 重复值去除

    tuple_r_dict = lambda _dict: dict(val[::-1] for val in _dict.items()) # Python3.x
    
    tuple_r_dict(tuple_r_dict(li))
    

    1、lambda 匿名函数,冒号前为参数,个数可以有0个或多个,冒号右边为返回值

    lambda [arg1 [, agr2,…argn]] : expression

    tuple_r_dict = lambda _dict: dict(val[::-1] for val in _dict.items())
    

    这句表明创建一个匿名函数

    • 输入:_dict
    • 输出:dict(val[::-1] for val in _dict.items())

    2、 _dict.items()

    dict.items()返回字典的(键,值)元组对的列表
    
    dic={7:'d',9:'s',5:'a'}
    print('dic:',dic)
    print('dic.items():',dic.items())
    
    #输出
    #dic: {9: 's', 5: 'a', 7: 'd'}
    #dic.items(): dict_items([(9, 's'), (5, 'a'), (7, 'd')])
    

    3、val[::-1]

    把元组对顺序对调

    1,'A')[::-1]  
    => ('A',1)
    

    [1,2,3,4,5][:4:2] => [1,3] #取列表中的前4个数,步长为2//第一个冒号左右两边代表在这个列表中的截取范围,第二个冒号右边代表截取范围内每2个取一个数

    总结:

    生成一个匿名函数,函数返回一个字典dict(val[::-1] for val in _dict.items())

    _dict.items()先返回原字典的(键,值)元组对列表

    val[::-1] for val in _dict.items() 遍历列表,把列表中的每个元组对中两个值位置对调

    dict()把列表转变为字典

    至此,生成的新字典的键为旧字典的键值,新键值为旧字典的键。利用字典的键唯一性,去除旧字典的重复键值。

    再执行一次tuple_r_dict(tuple_r_dict(z)),把键值对再对调回来

    cs