如何删除下面的元组列表中的所有元组,其中只有一个特定索引永远不会重复?在这种情况下,我需要删除每个元组的第二个值(也称为索引1)的重复项。
[(1051,97),(1051,132),(1048,132),(1048,283),(1048,438)]
^^^ ^^^
所需的输出:
[(1051,97),(1051,132),(1048,283),(1048,438)]
能够保留上述所需输出中显示的一阶优先级的奖励点。
答案 0 :(得分:0)
您可以维护在迭代过程中遇到的所有索引1元素的集合,并且如果未遇到其索引1元素,则仅在最终结果中包含元组:
lst = [(1051,97),(1051,132),(1048,132),(1048,283),(1048,438)]
s = set()
res = []
for i, j in lst:
if j not in s:
s.add(j)
res.append((i,j))
print(res)
# [(1051, 97), (1051, 132), (1048, 283), (1048, 438)]
答案 1 :(得分:0)
lst = [(1051,97),(1051,132),(1048,132),(1048,283),(1048,438)]
lst = list(reversed([(v, k) for k, v in {t[1]: t[0] for t in reversed(lst)}.items()]))
print(lst)
# [(1051, 97), (1051, 132), (1048, 283), (1048, 438)]
答案 2 :(得分:0)
使用pandas
df = pd.DataFrame(l)
df.loc[df[1].drop_duplicates().index].values.tolist()
答案 3 :(得分:0)
建立反向字典。由于字典键始终是唯一的,因此重复符自然会被消除:
l = [(1051,97),(1051,132),(1048,132),(1048,283),(1048,438)]
[(x,y) for y,x in {y:x for x,y in l}.items()]
#[(1051, 97), (1048, 132), (1048, 283), (1048, 438)]
此解决方案不保留订单。