Python 三人一组的整个模型场的DJANGO平均值(平均值)

Python 三人一组的整个模型场的DJANGO平均值(平均值),python,average,Python,Average,我有大约6000个值。每个值都有一个名为total的字段。我需要为每3个元素(组)生成一组四舍五入的平均值(我想这部分应该在views.py) 例如: 130045810120 所需设置: 35610 My models.py看起来像: class resume(models.Model): total = models.DecimalField(max_digits=9, decimal_places=2,default=0) 我正在考虑在views.py(渲染时)添加与resume.o

我有大约6000个值。每个值都有一个名为
total
的字段。我需要为每3个元素(组)生成一组四舍五入的平均值(我想这部分应该在
views.py

例如: 130045810120

所需设置: 35610

My models.py看起来像:

class resume(models.Model):
  total = models.DecimalField(max_digits=9, decimal_places=2,default=0)

我正在考虑在
views.py
(渲染时)添加与
resume.objects.all().aggregate(Avg('total'))
有关的内容。我看到的一些解决方案使用SQL。关于如何从django执行此操作,您有什么想法吗?

您可能需要按如下方式手动执行此操作:

# http://docs.python.org/2/library/itertools.html
def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

def avg(xs):
    xs = [x for x in xs if x is not None]
    return sum(xs) / len(xs)

# Retrieve all `total` values as a flat list-like ValueListQuerySet.
values = resume.objects.all().values_list('total', flat=True)
avgs = [avg(xs) for xs in grouper(values, 3)]

您可能需要按如下方式手动执行此操作:

# http://docs.python.org/2/library/itertools.html
def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

def avg(xs):
    xs = [x for x in xs if x is not None]
    return sum(xs) / len(xs)

# Retrieve all `total` values as a flat list-like ValueListQuerySet.
values = resume.objects.all().values_list('total', flat=True)
avgs = [avg(xs) for xs in grouper(values, 3)]

您可能需要按如下方式手动执行此操作:

# http://docs.python.org/2/library/itertools.html
def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

def avg(xs):
    xs = [x for x in xs if x is not None]
    return sum(xs) / len(xs)

# Retrieve all `total` values as a flat list-like ValueListQuerySet.
values = resume.objects.all().values_list('total', flat=True)
avgs = [avg(xs) for xs in grouper(values, 3)]

您可能需要按如下方式手动执行此操作:

# http://docs.python.org/2/library/itertools.html
def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

def avg(xs):
    xs = [x for x in xs if x is not None]
    return sum(xs) / len(xs)

# Retrieve all `total` values as a flat list-like ValueListQuerySet.
values = resume.objects.all().values_list('total', flat=True)
avgs = [avg(xs) for xs in grouper(values, 3)]
固定的:

现在,由于聚合函数,它甚至稍微不那么笨重了。第一行从所有简历中提取总值。接下来,在所有_-res的前三分之一中有一个i的字符串理解,它将从i*3到(i*3)+3的3个数字相加。列表理解中i的第一次迭代是这样的(假设所有的_res开始[5,4,6,…]):

编辑:同样,我认为这不是什么大问题,但是如果你的数据库没有n个记录,其中n%3=0(我认为6k是一个四舍五入的数字),并且你真的需要每个数字都是正确的,那么你可以用len(I*3:I*3+3)来除,而不是3,因为如果一个切片的上限超出了范围,它只会返回列表,直到结束。

修复:

from django.db.models import Avg
all_res = Resume.objects.all()
answer = [ all_res[(i*3):((i*3)+3)].aggregate(Avg('total') for i in range(all_res.count()/3)]
现在,由于聚合函数,它甚至稍微不那么笨重了。第一行从所有简历中提取总值。接下来,在所有_-res的前三分之一中有一个i的字符串理解,它将从i*3到(i*3)+3的3个数字相加。列表理解中i的第一次迭代是这样的(假设所有的_res开始[5,4,6,…]):

编辑:同样,我认为这不是什么大问题,但是如果你的数据库没有n个记录,其中n%3=0(我认为6k是一个四舍五入的数字),并且你真的需要每个数字都是正确的,那么你可以用len(I*3:I*3+3)来除,而不是3,因为如果一个切片的上限超出了范围,它只会返回列表,直到结束。

修复:

from django.db.models import Avg
all_res = Resume.objects.all()
answer = [ all_res[(i*3):((i*3)+3)].aggregate(Avg('total') for i in range(all_res.count()/3)]
现在,由于聚合函数,它甚至稍微不那么笨重了。第一行从所有简历中提取总值。接下来,在所有_-res的前三分之一中有一个i的字符串理解,它将从i*3到(i*3)+3的3个数字相加。列表理解中i的第一次迭代是这样的(假设所有的_res开始[5,4,6,…]):

编辑:同样,我认为这不是什么大问题,但是如果你的数据库没有n个记录,其中n%3=0(我认为6k是一个四舍五入的数字),并且你真的需要每个数字都是正确的,那么你可以用len(I*3:I*3+3)来除,而不是3,因为如果一个切片的上限超出了范围,它只会返回列表,直到结束。

修复:

from django.db.models import Avg
all_res = Resume.objects.all()
answer = [ all_res[(i*3):((i*3)+3)].aggregate(Avg('total') for i in range(all_res.count()/3)]
现在,由于聚合函数,它甚至稍微不那么笨重了。第一行从所有简历中提取总值。接下来,在所有_-res的前三分之一中有一个i的字符串理解,它将从i*3到(i*3)+3的3个数字相加。列表理解中i的第一次迭代是这样的(假设所有的_res开始[5,4,6,…]):

编辑:同样,我认为这不是一个大问题,但是如果你的数据库没有n个记录,其中n%3=0(我认为6k是一个四舍五入的数字),并且你真的需要每个数字都是正确的,那么你总是可以除以len(I*3:I*3+3),而不是3,因为如果一个切片的上限超出了范围,它只会返回列表,直到最后。

ValueQuerySet
的每一项都是一个字典。因此,如果不进行修改,代码将无法按预期工作。。
ValueQuerySet
的每一项都是一个字典。因此,如果不进行修改,代码将无法按预期工作。。
ValueQuerySet
的每一项都是一个字典。因此,如果不进行修改,代码将无法按预期工作。。
ValueQuerySet
的每一项都是一个字典。因此,如果不进行修改,代码将无法按预期工作。