我的列表中有以下值:
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'}]
在那个例子中,我怎样才能只得到唯一值 ==> 两个。
谢谢
答案 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()) 将为您提供唯一值的列表。