【问题标题】:Removing duplicates members from a list of tuples从元组列表中删除重复的成员
【发布时间】:2011-04-29 21:17:38
【问题描述】:

这个问题在 SO 中可能有相似之处,但我的情况有点不同。我试图让这些答案适应我的问题,但做不到。 所以事情是这样的: 我有这个清单:

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

我想删除此列表中的重复项,方法是保留与其关联的较大数字的元组。所以列表应该是这样的:

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

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

【问题讨论】:

  • 我认为使用字典将字符列表映射到键可能更有意义。

标签: python list duplicates tuples


【解决方案1】:
>>> 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})

【讨论】:

  • 然后您只需执行list(d.iteritems()) 即可返回列表。
【解决方案2】:

如果如您的示例所示,项目已经按数字排序(在您的情况下是相反的),您可以这样做:

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

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

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 2018-12-25
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多