python列表:保留唯一值

时间:2021-04-08 10:36:08

标签: python dictionary filter unique lis

我的列表中有以下值:


     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'}]

在那个例子中,我怎样才能只得到唯一值 ==> 两个。

谢谢

3 个答案:

答案 0 :(得分:0)

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

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

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

如果你只有一个字符串列表,那么解决方案就简单多了,正如上面的评论中提到的:

A = list(set(A))

答案 1 :(得分:0)

您可以遍历列表中的集合并将它们合并为一个新集合,然后将其转换为列表。就我个人而言,我更喜欢使用 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']

答案 2 :(得分:0)

如果您的列表元素总是设置的,则更复杂的单行

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

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