у меня есть объект, который имеет несколько значений. одно из его полей - метка времени. При создании объекта я преобразовал входную строку в метку времени.
DATETIME_FORMAT = '%d-%b-%y %H.%M.%S.%f %p'
class CustomObject:
def __init__(self, input_data):
entry_list = [entry.strip() for entry in input_data.split(',')]
self.field_one = entry_list[0]
self.field_two = entry_list[1]
self.field_timestamp = datetime.strptime(entry_list[2], DATETIME_FORMAT)
Есть список CustomObject
, который я хочу отсортировать на основе field_timestamp
. Как мне это сделать?
Я смотрел на функцию sorted
, но она принимает лямбда как выражение. В этом случае у меня нет выражения, у меня есть только одно поле, которое я буду использовать для сортировки. как это сделать?
не могли бы вы рассказать подробнее? Дата и время уже преобразованы.
Что значит «не иметь выражения»? Используйте sorted(..., key=lambda obj: obj.field_timestamp)
См. docs.python.org/2/howto/sorting.html#key-functions
Как насчет использования объекта SortedDict [grantjenks.com/docs/sortedcontainers/sorteddict.html] из sortedcontainers. Если вы используете метки времени в качестве ключа, то ваш список будет отсортирован.
sorted_list = sorted(list_of_CustomObject, key=lambda x: x.field_timestamp)
но на самом деле вам следует использовать метод доступа к члену вместо открытой переменной-члена.
"но на самом деле вам следует использовать метод доступа к члену вместо открытой переменной-члена" Почему? Python - это не Java или C
это не обязательно, но это хорошая форма. Если позже внутренняя реализация изменится, отладить код, использующий объект, будет меньше.
день за днем я влюбляюсь в питона. если бы это было в java, мне пришлось бы написать 1-2 метода, чтобы сделать это правильно.
С
lambda
. Преобразовать вdatetime
в лямбде