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

0 投票
2 回答
2021 浏览
提问于 2025-04-16 06:01

这个问题在StackOverflow上可能有类似的,但我的情况有点不同。我尝试把那些答案调整到我的问题上,但没成功。

事情是这样的:

我有一个列表:

[(['c', 'a', 'b'], 10), (['c', 'a', 'b'], 9),(['h','b'],2)],比如说。

我想要去掉这个列表中的重复项,但要保留与之关联的数字更大的元组。所以这个列表应该变成这样:

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

有没有人能帮我一下?里面的列表顺序非常重要。

谢谢!

2 个回答

2

如果像你举的例子那样,项目已经按照数字排序了(在你的情况下是反向排序),你可以这样做:

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

默认情况下,dict() 函数的行为是只保存最后一次看到的键的值。所以如果它们是反向排序的,那么在反向遍历时最后看到的值就是最大的那个。否则,可以参考 @SilentGhost 的 回答

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})

撰写回答