如果元组的一部分不存在则添加到 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
向后循环列表。否则后面的值将覆盖第一个匹配的条目。
我想使用类似于 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
向后循环列表。否则后面的值将覆盖第一个匹配的条目。