Python 如何在没有硬编码字段值的情况下对对象进行排序?

Python 如何在没有硬编码字段值的情况下对对象进行排序?,python,django,django-models,Python,Django,Django Models,比如说我有一堆东西,父亲。所以每个父亲都会有一群孩子。无限多的孩子。每有一个父亲,就有许多孩子 我想按孩子的平均年龄对每个父亲进行分类 因为孩子的数量可以改变,他们的年龄也会增加,所以我不一定要将平均年龄硬编码到父亲模型中。我需要让这个值动态可用,以某种方式缓存,以便在查看100000名父亲时,可以根据平均儿童年龄快速排序 关于如何有效地实现这一点,有什么想法吗?我相信lambdas的速度不够快,也不够实用 使用排序和lambda,例如: sorted(father_list, key=lamb

比如说我有一堆东西,父亲。所以每个父亲都会有一群孩子。无限多的孩子。每有一个父亲,就有许多孩子

我想按孩子的平均年龄对每个父亲进行分类

因为孩子的数量可以改变,他们的年龄也会增加,所以我不一定要将平均年龄硬编码到父亲模型中。我需要让这个值动态可用,以某种方式缓存,以便在查看100000名父亲时,可以根据平均儿童年龄快速排序


关于如何有效地实现这一点,有什么想法吗?我相信lambdas的速度不够快,也不够实用

使用排序和lambda,例如:

sorted(father_list, key=lambda: father: avg_children(father))
你可以检查一下:

计算并缓存硬编码的平均出生日期,而不是平均年龄,并按其排序。它会给你同样的结果,它不会改变,除非父亲有了另一个孩子,然后你可以为那个父亲重新计算它。您可以找到这样的平均日期:


是的,但是对于100000个对象,运行排序不是需要一分钟以上的时间吗?我确信lambdas不够快或不实用:然后每次子对象的数量发生变化时,都在父实例上缓存该值。排序从不需要硬编码字段值。
from datetime import datetime

kids_dobs = ['1/2/1990', '3/4/1993', '5/6/1995']
dates = [datetime.strptime(dob, "%d/%m/%Y") for dob in kids_dobs]
timestamps = [date.timestamp() for date in dates]
avg_timestamp = sum(timestamps) / len(timestamps)
avg_date = datetime.fromtimestamp(avg_timestamp)

print(avg_date.strftime("%d/%m/%Y"))  # 02/12/1992