我有一个看起来像元组的列表
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'解决这个问题,谢谢!
答案 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