В каком виде лучше всего хранить список событий в python.
Чаще всего я видел, что хранят в виде списка словарей.
Что-нибудь типа такого:
dt = datetime(2007, 11, 26, 0, 0)
events = [
{
"time": dt,
"str": "str_1",
"int": 1
},
...
]
И тогда для вставки очередного события придется или "ковыряться с индексами, или каждый раз делать сортировку.
На мой взгляд лучше события хранить в виде именованных кортежей.
Это позволит нам вставлять события с помощью реализации алгоритма бинарного поиска bisect.
Код будет выглядеть так:
from bisect import insort
from datetime import datetime, timedelta
from typing import NamedTuple
class Event(NamedTuple):
time: datetime
s: str
d: int
# Список событий
events = [
Event(dt, '1', 1),
Event(dt + timedelta(minutes=1, hours=5), '5', 5),
Event(dt + timedelta(minutes=2, hours=5), '6', 6)
]
# Добавляем событие сразу на его законное место
new_event = Event(dt + timedelta(seconds=30, minutes=1, hours=5), '4', 4)
insort(events, new_event)
Новое событие как и ожидается попадает на своё место и сортировка нам будет не нужна так как список будет всегда отсортирован.
>>> events
[Event(time=datetime.datetime(2007, 11, 26, 0, 0), s='1', d=1),
Event(time=datetime.datetime(2007, 11, 26, 5, 1), s='5', d=5),
Event(time=datetime.datetime(2007, 11, 26, 5, 1, 30), s='4', d=4),
Event(time=datetime.datetime(2007, 11, 26, 5, 2), s='6', d=6)]
Комментарии