【问题标题】:python list : keep unique valuespython list:保持唯一值
【发布时间】:2021-04-08 10:36:08
【问题描述】:

我的列表中有以下值:


     A= [{'43c776cc-dcfe-498e-9e0c-465e498c4509'},
    {'43c776cc-dcfe-498e-9e0c-465e498c4509'},
    {'43c776cc-dcfe-498e-9e0c-465e498c4509'},
    {'fbcbdda3-e391-42f0-b139-c266c0bd564d'},
    {'fbcbdda3-e391-42f0-b139-c266c0bd564d'},
    {'43c776cc-dcfe-498e-9e0c-465e498c4509'},
    {'43c776cc-dcfe-498e-9e0c-465e498c4509'},
    {'43c776cc-dcfe-498e-9e0c-465e498c4509'}]

如何才能在该示例中仅获得唯一值 ==> 两个。

谢谢

【问题讨论】:

  • 为什么是集合列表A=[{''},{''}] 而不仅仅是字符串列表A=['','']?然后你可以简单地使用set(A) 来获取唯一值
  • 如果每个集合中只有一个元素:set([list(x)[0] for x in A])

标签: python dictionary filter unique lis


【解决方案1】:

假设您确实希望每个元素都是一个包含单个字符串而不是单个字符串的集合,您可以做一些有点笨拙的事情,如下所示:

A = [set(x) for x in set([tuple(x) for x in A])]

我真的会质疑你为什么想要这个,特别是如果它们是单个字符串。

但是,如果您只有一个字符串列表,则解决方案要简单得多,如上面的评论中所述:

A = list(set(A))

【讨论】:

    【解决方案2】:

    您可以遍历列表中的集合并将它们合并到一个新集合中,然后将其转换为列表。就个人而言,我更喜欢使用 reduce 函数并将集合合并到一行中。两者都给出相同的结果,但我个人喜欢通过 reduce 的第二种方式。

    
    sets_list = [{'43c776cc-dcfe-498e-9e0c-465e498c4509'},
                 {'43c776cc-dcfe-498e-9e0c-465e498c4509'},
                 {'43c776cc-dcfe-498e-9e0c-465e498c4509'},
                 {'fbcbdda3-e391-42f0-b139-c266c0bd564d'},
                 {'fbcbdda3-e391-42f0-b139-c266c0bd564d'},
                 {'43c776cc-dcfe-498e-9e0c-465e498c4509'},
                 {'43c776cc-dcfe-498e-9e0c-465e498c4509'},
                 {'43c776cc-dcfe-498e-9e0c-465e498c4509'}]
    
    # using a loop
    my_set = set()
    for _set in sets_list:
        my_set |= _set
    print("loop:", list(my_set))
    
    # using reduce function
    from functools import reduce
    print("reduce:", list(reduce(lambda set_a, set_b: set_a | set_b, sets_list)))
    

    输出

    loop: ['43c776cc-dcfe-498e-9e0c-465e498c4509', 'fbcbdda3-e391-42f0-b139-c266c0bd564d']
    reduce: ['43c776cc-dcfe-498e-9e0c-465e498c4509', 'fbcbdda3-e391-42f0-b139-c266c0bd564d']
    

    【讨论】:

      【解决方案3】:

      如果您的列表元素始终是集合,则更复杂的单行

      list(set(sum(map(list, A),[]))).

      sum(map(list, A), []) 会将所有单独的集合转换并合并为一个列表,然后应用 list(set()) 将为您提供唯一值的列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-12
        • 2020-01-17
        • 2015-08-14
        • 1970-01-01
        • 1970-01-01
        • 2014-09-28
        • 1970-01-01
        • 2023-04-04
        相关资源
        最近更新 更多