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

时间:2017-09-30 00:19:56

标签: python django django-models

我们说我有一堆物品,父亲。所以每个父亲都会有一群孩子。无数的孩子。每1个父亲,有很多孩子。

我想按照孩子的平均年龄对每个父亲进行排序。

由于孩子的数量可以改变,他们的年龄会增加,我不一定要将平均年龄硬编码到父亲模型中。我需要动态提供该值,以某种方式进行缓存,以便在查看100,000名父亲时可以按照平均孩子的年龄进行快速排序。

关于如何有效地做出任何想法?我确信lambda不够快或不实用。

2 个答案:

答案 0 :(得分:1)

计算并缓存(硬编码)“平均出生日期”而不是平均年龄并按其排序。它会给你相同的结果,除非父亲得到另一个孩子,否则它不会改变,那么你可以为那个父亲重新计算它。您可以找到平均日期,如下所示:

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

答案 1 :(得分:0)

使用sorted和lambda,例如:

bcr

你可以检查一下: How to sorting