我想使用類似于 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)}
uj5u.com熱心網友回復:
在這種情況下為什么不使用字典呢?
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)}
uj5u.com熱心網友回復:
首先將資料轉換為字典。
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。否則后面的值會覆寫第一個匹配的條目。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386383.html
