I have a list of dicts like this:
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}
]
Now I want to find the first time of each day and assign km = 0. Which should lead to this:
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}
]
How can I do this?
So far I did not even find a good starting point to approach this issue.
>Solution :
Try:
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"].year, d["Zeit"].month, d["Zeit"].day)):
first = next(g)
first["km"] = 0
print(data)
Prints:
[
{"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},
]