如何在包含时间戳的字典列表中找到每天的第一个时间?

问题描述 投票:0回答:2

我有一个这样的字典列表:

data = [
    {"Zeit": datetime(2024, 2, 27, 8, 0), "km": 10},
    {"Zeit": datetime(2024, 2, 27, 13, 30), "km": 20},
    {"Zeit": datetime(2024, 2, 27, 17, 30), "km": 40},
    {"Zeit": datetime(2024, 2, 28, 9, 15), "km": 15},
    {"Zeit": datetime(2024, 2, 28, 14, 45), "km": 25}
]

现在我想找到每天的第一个时间并指定 km = 0。这应该导致:

data = [
    {"Zeit": datetime(2024, 2, 27, 8, 0), "km": 0},
    {"Zeit": datetime(2024, 2, 27, 13, 30), "km": 20},
    {"Zeit": datetime(2024, 2, 27, 17, 30), "km": 40},
    {"Zeit": datetime(2024, 2, 28, 9, 15), "km": 0},
    {"Zeit": datetime(2024, 2, 28, 14, 45), "km": 25}
]

我该怎么做?

到目前为止,我什至没有找到解决这个问题的良好起点。

python list dictionary datetime
2个回答
0
投票

尝试:

from datetime import datetime
from itertools import groupby

data = [
    {"Zeit": datetime(2024, 2, 27, 8, 0), "km": 10},
    {"Zeit": datetime(2024, 2, 27, 13, 30), "km": 20},
    {"Zeit": datetime(2024, 2, 27, 17, 30), "km": 40},
    {"Zeit": datetime(2024, 2, 28, 9, 15), "km": 15},
    {"Zeit": datetime(2024, 2, 28, 14, 45), "km": 25},
]

# sort if needed:
# data.sort(key=lambda d: d["Zeit"])

for _, g in groupby(data, lambda d: d["Zeit"].day):
    first = next(g)
    first["km"] = 0

print(data)

打印:

[
    {"Zeit": datetime.datetime(2024, 2, 27, 8, 0), "km": 0},
    {"Zeit": datetime.datetime(2024, 2, 27, 13, 30), "km": 20},
    {"Zeit": datetime.datetime(2024, 2, 27, 17, 30), "km": 40},
    {"Zeit": datetime.datetime(2024, 2, 28, 9, 15), "km": 0},
    {"Zeit": datetime.datetime(2024, 2, 28, 14, 45), "km": 25},
]

0
投票

将 DateTime 转换为 Unix 时间戳,然后按升序排序。列表中的第一个就是您要查找的。

从下面的代码开始:

import time
 
date_time = datetime.datetime(2021, 7, 26, 21, 20)

unix_timestamp = time.mktime(date_time.timetuple())```
© www.soinside.com 2019 - 2024. All rights reserved.