如何删除重复元组中第二个元素的元组列表中的所有实例?
我有:
a = [('a',1),('b',3),('c',1),('d',1),('e',5),('f',1)]
我想回来
[('b',3),('e',5)]
我试过
a = list(set(a))
但是并没有删除所有事件,有没有办法在不导入任何库的情况下执行此操作?
答案 0 :(得分:1)
尝试以下方法:
a = [('a',1),('b',3),('c',1),('d',1),('e',5),('f',1)]
reduced = [y for x in a for y in x]
[x for x in a if reduced.count(x[0]) == 1 and reduced.count(x[1]) == 1]
# [('b', 3), ('e', 5)]
这会将原始元组列表展平为一个列表。然后它遍历原始列表,并且对于每个元组,它检查其元素中的任何一个元素是否仅在展平列表中。如果是这样的话,就会保留它;否则,它会丢弃它。
你也可以使用python词典(如果内部元组的第一个元素彼此不同):
list({k:v for k,v in dict(a).items() if list(dict(a).values()).count(v)==1}.items())
这里的想法是将您的元组列表转换为字典,并将key-value
对保留在字典count
中value
部分的values
为1的位置
我希望这会有所帮助。
答案 1 :(得分:0)
def UniqueTuples(tuples):
seen, unique = set(), list()
for x, y in tuples:
if y not in seen:
seen.add(y)
unique.append((x, y))
return unique