如果元组的一部分不存在则添加到 set()

Adding to set() if part of tuple not exists

我想使用类似于 add() 函数的东西将元组添加到集合中。但是,如果该元组的一部分已经存在于集合中,我希望不要添加它们。

例如:

mySet = set()
myList = [['A','B',1],['B','C',2],['C','D',3],['A','B',2]]

for i in myList:
    mySet.add(((i[0],i[1]),i[2]))

这给了我一个结果:

mySet = (('A', 'B'), 1), (('A', 'B'), 2), (('B', 'C'), 2), (('C', 'D'), 3)

但我希望 ('A','B')-组合只出现一次(第一次添加),所以我的结果是:

mySet = {(('A', 'B'), 1), (('B', 'C'), 2), (('C', 'D'), 3)}

在那种情况下为什么不使用字典?

d = {}
for i,j,k in myList:
    if (i,j) not in d:
        d[(i,j)] = k
mySet = set(d.items())

正如@Matthias 所建议的,reversed 让它变得更好:

mySet = set({(i,j): k for i,j,k in reversed(myList)}.items())

输出:

{(('A', 'B'), 1), (('B', 'C'), 2), (('C', 'D'), 3)}

首先将数据转换为字典。

my_list = [['A','B',1],['B','C',2],['C','D',3],['A','B',2]]
my_dict = {tuple([*x[:2]]):x[2] for x in reversed(my_list)}
# alternative for the previous line: my_dict = {(x, y): z for x, y, z in reversed(my_list)}
print(my_dict)  # debug output
my_set = {*my_dict.items()}  # or: my_set = set(my_dict.items())
print(my_set)

my_dict 的输出是 {('A', 'B'): 1, ('C', 'D'): 3, ('B', 'C'): 2}

最后一组是{(('A', 'B'), 1), (('B', 'C'), 2), (('C', 'D'), 3)}

根据您想要的输出,您需要列表中符合条件的第一个元素。所以我们必须用 reversed 向后循环列表。否则后面的值将覆盖第一个匹配的条目。