这个问题可能与SO类似,但我的情况有点不同。我试图让这些答案适应我的问题,但不能。 所以这是事情: 我有这个清单:
例如 [(['c', 'a', 'b'], 10), (['c', 'a', 'b'], 9),(['h','b'],2)]
。
我想通过保留与其关联的较大数字的元组来删除此列表中的重复项。所以列表应该如下所示:
[(['c', 'a', 'b'], 10),(['h','b'],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。