这件事让我很难受。我有一个元组列表,但只对基于元组的第一项删除重复项感兴趣
我只需要查看元组中的第一项,就可以从各个列表中删除重复项
我需要比较uniqueFound中的unique的重复列表,只保留uniqueFound中没有的unique列表,也只对元组的第一项感兴趣。不应考虑其他数字和值。这是我想到的,它仍然将N1传递到最终列表中,而它本不应该这样做。必须有一个更简单的方法来做到这一点
#unique found
uniqueFound = [('N1', '20.3', 1, 58, 14),
('N2', '20.1', 1, 44, 14),
('N3', '21', 1, 23, 14),
('N1', '21', 1, 23, 14),
('N5', '33', 1, 34, 14)
]
unique = [('N0', '23', 2, 22, 1),
('N6', '33.1', 1, 25, 11),
('N3', '21', 1, 33, 12),
('N1', '44', 1, 2, 44),
('N7', '33.2', 4, 22, 12),
('N7', '3.2', 2, 21, 132)
]
#Remove duplicates
uniqueFound = dict((x[0], x) for x in uniqueFound).values()
unique = dict((x[0], x) for x in unique).values()
fmatches=[]
uniquefinal = []
for x in uniqueFound:
for y in unique:
if x[0] == y[0]:
fmatches.append(y)
else:
continue
fmatches = dict((x[0], x) for x in fmatches).values()
for x in unique:
for y in fmatches:
if x[0] == y[0]:
continue
else:
uniquefinal.append(x)
duplicatesrem = dict((x[0], x) for x in uniquefinal).values()
uniqueFinal = list(duplicatesrem)
print(uniqueFinal)
产生
[('N0', '23', 2, 22, 1), ('N6', '33.1', 1, 25, 11), ('N3', '21', 1, 33, 12), ('N1', '44', 1, 2, 44), ('N7', '3.2', 2, 21, 132)]
我想要什么(在unique中,但不是在uniqueFound中):
[('N0', '23', 2, 22, 1), ('N6', '33.1', 1, 25, 11), ('N7', '3.2', 2, 21, 132)]
谢谢你的帮助
另一个利用字典的解决方案:
aux1
是一个辅助集,包含来自uniqueFound
的“键”aux2
是一个辅助集,包含已使用的“键”如果在
aux1
或aux2
中找到一个“键”(e0
),则不执行任何操作。否则,将“key”添加到aux2
,并将元素添加到结果中相关问题 更多 >
编程相关推荐