使用多个参数对动态数据进行排序,并在python dango中平均分配



我想根据一些字段参数对用户列表进行排序,并将它们平均分配到一个列表中,我正在尝试一种自动化的方式,帮助学校将学生分配到教室中,作为更大系统的一部分。

解释功能:

假设有100名学生注册了四年级,在这个年级里,有4个部分{A、B、C、D},当函数运行时,我想把所有注册四年级的学生都放在一个列表中,然后函数应该遍历列表并尝试(因为会有密切相关的值,可能不完全相似(将它们平均分布在4个列表(节数(中,或者直接将它们保存在相应的节实例中,这种效果在某种程度上应该类似于一块磁铁,相似之处相互排斥,差异之处相互吸引,直到列表被细化到最佳状态。

如果这个方法很慢也没什么问题,因为一个列表中不会有很多学生,因为它将在年级级别执行,请给我指一个资源,分享一个剪辑或解释我可以实现它的方法。5名学生:

Student-1:{
age:12,height:1.2m, sex:MALE
}
Student-2:{
age:11,height:1.2m, sex:FEMALE
}
Student-3:{
age:13,height:1.3m, sex:MALE
}
Student-4:{
age:11,height:1.24m, sex:FEMALE
}
Student-5:{
age:13,height:1.2m, sex:MALE
}

预期输出:

section-1:{
Student-1,
Student-3
}
section-2:{
Student-5,
Student-4
}
section-3:{
Student-2
}

因此,如果相似性大于差异性,即Similar:{age = True, height=True, sex=False}==similarities > difference,并且与其他实例相比总体上更相似,则应将其放入下一类

非常感谢提前

您必须编写一个"重量;函数,然后将其调整为每个属性所需的权重。然后用这个";重量;函数,这样类似的函数实际上是最接近的(与您想要的相反(。

一旦你到达那里,你用所有学生对结果列表进行切片,这样第一个在A,第二个在B,依此类推。

这似乎是最理智的方式——否则你可能会在一个小组中走极端,就像同一小组中最高和最矮的学生一样。

权重函数可能类似于:

import statiscs
import itertools
def studens_in_grade(students):
average_height = statistics.median(student.height for student in students)
def weight(student):
gender = 100 if student.gender == "female" else 0
height = 30 * (student.height - average_height)
...
return gender + height + ....
students.sort(key=weight)
groups = {}
for group, student in zip(itertools.cycle("ABCD"), students):
groups.setdefault(group, []).append(student)
return groups

最新更新