元组列表:如果元素具有另一个相同的元素,则通过元素的比较来移除元组

时间:2016-12-30 15:22:02

标签: python list tuples list-comprehension

我有一个看起来像元组的列表 items = [(id, date), ...]

我想过滤元组列表,所以我只为每个唯一的id保留一个元组,并且对于所有具有相同ID的元组,我想保留最新的条目日期值。

例如:

items = [('1', '12/2/2016'), ('2', '12/20/2016'), ('1', '12/24/2016')]

# Apply filter comparing tuples with identical [0] element based off [1] element

items = [('2', '12/20/2016'), ('1', '12/24/2016')]

我正在寻找最优雅的' pythonic'解决这个问题,谢谢!

2 个答案:

答案 0 :(得分:3)

一种方法是简单地转换为字典并再次返回(如果您确实需要它作为元组列表 - 或将其保留为字典)。
如果元组不是日期顺序,那么您可以根据日期sorted进行简单:

>>> from datetime import datetime
>>> items = [('1', '12/2/2016'), ('2', '12/20/2016'), ('1', '12/24/2016')]
>>> d = dict(sorted(items, key=lambda x: datetime.strptime(x[1], '%m/%d/%Y')))
>>> items = list(d.items())
[('2', '12/20/2016'), ('1', '12/24/2016')]

答案 1 :(得分:0)

我们要对它们进行排序,然后使用t对它们进行分组,然后使用itertools.groupby查找最近的日期。我们将编写一个关键函数,它接受其中一个元组并返回一个max对象。

datetime.date

编辑:我们只需获取from datetime import date from itertools import groupby def make_date(t): month, day, year = map(int, t[1].split('/')) return date(year, month, day) items = [max(g, key=make_date) for k, g in groupby(sorted(items, key=lambda x: int(x[0])), key=lambda x: x[0])] 获取元组的最后一个元素并使用t[-1]获取日期时间

datetime.datetime.strptime