繁体   English   中英

如何获取列表中每个 ID 的最后日期?

[英]How to get the last date for each ID in a list?

我有一个非常有趣的项目,它可能会使我们所有人受益。 如果该日期时间低于my_time ,我会尝试获取my_cars每个车辆 ID 的最后日期my_time

这是my_cars

my_cars = [['Audi', '111', 'White', 'True', 'NY', '06-09-2020', '10:11:32'], 
           ['Audi', '111', 'White', 'True', 'BS', '06-09-2020', '10:11:32'], 
           ['Volkswagen', '222', 'Blue', 'False', 'BR', '06-09-2020', '11:26:21'], 
           ['Mercedes', '333', 'Green', 'True', 'BE', '06-09-2020', '14:51:45'], 
           ['Mercedes', '333', 'Green', 'True', 'BE', '06-09-2020', '15:59:45']
           ['Opel', '555', 'Black', 'True', 'ER', '06-09-2020', '16:30:00']]

这是我的代码:

my_time =  datetime.datetime.strptime('2020-09-06 16:15:00', '%Y-%m-%d %H:%M:%S') 
date_times = []

results = []
date_times = []

for row in my_cars:
        date_time1 = row[-2] + row[-1] 
        date_time2 = datetime.datetime.strptime(row[-2] + row[-1] , '%d-%m-%Y%H:%M:%S') 
        date_times.append(date_time2)
        if date_time2 == max(dt for dt in date_times if dt < my_time):
            results.append(row)
        
print(results)

这是输出:

   [['Audi', '111', 'White', 'True', 'NY', '06-09-2020', '10:11:32'],  
    ['Audi', '111', 'White', 'True', 'BS', '06-09-2020', '10:11:32'], 
    ['Volkswagen', '222', 'Blue', 'False', 'BR', '06-09-2020', '11:26:21'], 
    ['Mercedes', '333', 'Green', 'True', 'BE', '06-09-2020', '14:51:45'], 
    ['Mercedes', '333', 'Green', 'True', 'BE', '06-09-2020', '15:59:45']]

这是所需的输出:

   [['Audi', '111', 'White', 'True', 'NY', '06-09-2020', '10:11:32'],  
    ['Audi', '111', 'White', 'True', 'BS', '06-09-2020', '10:11:32'], 
    ['Volkswagen', '222', 'Blue', 'False', 'BR', '06-09-2020', '11:26:21'], 
    ['Mercedes', '333', 'Green', 'True', 'BE', '06-09-2020', '15:59:45']]

您可以使用<来检查一个日期时间是否低于另一个日期时间:

if car_time < my_time:
  result.append(car)

因此,您只想显示给定的车辆一次,并且始终显示最新的日期。 鉴于您的列表是否按 DateTime 排序,这是我的解决方案:

new_cars = []
your_time =  datetime.strptime('2020-09-06 16:15:00', '%Y-%m-%d %H:%M:%S')

for car in reversed(cars):
    if your_time > datetime.strptime(car[-2] + car[-1] , '%d-%m-%Y%H:%M:%S'):
        for new_car in new_cars:
            # If the vehicle already in the list break the loop -> for else statement won't run ->
            # this car won't be added to the new list
            if car[:-2] == new_car[:-2]:
                break
        else:
            new_cars.append(car)

反转 new_car 列表后,输出为:

[['Audi', '111', 'White', 'True', 'NY', '06-09-2020', '10:11:32']
['Audi', '111', 'White', 'True', 'BS', '06-09-2020', '10:11:32']
['Volkswagen', '222', 'Blue', 'False', 'BR', '06-09-2020', '11:26:21']
['Mercedes', '333', 'Green', 'True', 'BE', '06-09-2020', '15:59:45']]

如果您不需要按 DateTime 排序的“汽车”列表,您可以像这样轻松地对其进行排序:

sorted(cars, key=lambda car: datetime.strptime(car[-2] + car[-1] , '%d-%m-%Y%H:%M:%S'))

在这种情况下,完整的代码您的日期限制如下所示:

from datetime import datetime

cars =   [['Audi', '111', 'White', 'True', 'NY', '06-09-2020', '10:11:32'],
    ['Audi', '111', 'White', 'True', 'BS', '06-09-2020', '10:11:32'],
    ['Volkswagen', '222', 'Blue', 'False', 'BR', '06-09-2020', '11:26:21'],
    ['Mercedes', '333', 'Green', 'True', 'BE', '06-09-2020', '14:51:45'],
    ['Mercedes', '333', 'Green', 'True', 'BE', '06-09-2020', '15:59:45'],
    ['Opel', '555', 'Black', 'True', 'ER', '06-09-2020', '16:30:00'],
]

# Use this only if the 'cars' list not necessary listed by the given datetime.
cars = sorted(cars, key=lambda car: datetime.strptime(car[-2] + car[-1] , '%d-%m-%Y%H:%M:%S'), reverse=True)

new_cars = []
your_time =  datetime.strptime('2020-09-06 16:15:00', '%Y-%m-%d %H:%M:%S')

for car in cars:
    if your_time > datetime.strptime(car[-2] + car[-1] , '%d-%m-%Y%H:%M:%S'):
        for new_car in new_cars:
            # If the vehicle already in the list break the loop -> for else statement won't run ->
            # this car won't be added to the new list
            if car[:-2] == new_car[:-2]:
                break
        else:
            new_cars.append(car)

再次反转输出

[['Audi', '111', 'White', 'True', 'NY', '06-09-2020', '10:11:32']
['Audi', '111', 'White', 'True', 'BS', '06-09-2020', '10:11:32']
['Volkswagen', '222', 'Blue', 'False', 'BR', '06-09-2020', '11:26:21']
['Mercedes', '333', 'Green', 'True', 'BE', '06-09-2020', '15:59:45']]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM