从元组列表中删除重复成员

时间:2010-10-24 17:02:03

标签: python list duplicates tuples

这个问题可能与SO类似,但我的情况有点不同。我试图让这些答案适应我的问题,但不能。 所以这是事情: 我有这个清单:

例如

[(['c', 'a', 'b'], 10), (['c', 'a', 'b'], 9),(['h','b'],2)]

我想通过保留与其关联的较大数字的元组来删除此列表中的重复项。所以列表应该如下所示:

[(['c', 'a', 'b'], 10),(['h','b'],2)]

谁能帮助我吗?内部列表中项目的顺序非常重要。 感谢

2 个答案:

答案 0 :(得分:3)

>>> lst = [(['c', 'a', 'b'], 10), (['c', 'a', 'b'], 9),(['h','b'],2)]
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for i, j in lst:
    d[tuple(i)] = max(d[tuple(i)], j)          # assuming positive numbers


>>> d
defaultdict(<class 'int'>, {('h', 'b'): 2, ('c', 'a', 'b'): 10})

答案 1 :(得分:2)

如果您的示例显示,项目已按数字排序(在您的情况下为反向),您可以执行以下操作:

d = dict(reversed(lst))
list(d.iteritems())

dict()函数的默认行为是存储最后一次看到的键值。因此,如果它们按相反顺序排序,则以相反顺序迭代时最后看到的值将是最大值。否则,请使用@ SilentGhost`s answer