def group_by_element(lst):
'''
list分组
'''
index = []
result = []
if len(lst)==1: 如果传进来的list只有一个元素
result.append(lst) 直接把这个list加到空的result里
else:
for i, _ in enumerate(lst): list有两个或以上的元素
if i < len(lst) - 1 and lst[i + 1] != lst[i]:
index.append(i + 1)
result.append(lst[:index[0]])
for i, item in enumerate(index):
if i < len(index) - 1:
result.append(lst[index[i]:index[i + 1]])
result.append(lst[item:])
return result
方法
def getNum(list: List[RelativeIndictorListUnit]) -> List[DiseaseDF]: #返回结果
# 定义方法 参数是list list里面的疾病名称
disease = []
for diseaseShowName in list:
disease.append(diseaseShowName.names) 把所有的疾病名称加到disease里
classList = ["运动", "呼吸", "循环", "消化", "神经", "生殖", "泌尿", "内分泌"]
session = Session()
nameList = []
diseaseDFList = []
# print(session.query(DiseaseDB).filter(DiseaseDB.name == "甲状腺囊肿").first().class_1)
diseaseList = session.query(DiseaseDB).filter(DiseaseDB.name.in_(disease)).all() 根据疾病查出所有的数据
for disease1 in diseaseList:
nameList.append(disease1.class_1) 把所有的查出来的一级分类加到nameList里
result = group_by_element(nameList) 把这些一级分类 计数 分组
for name in result:
diseaseDF = DiseaseDF(**{
"class_1": name[0], 一级分类
"DF": float('%.2f' % min(0.3 + len(name) / len(list) * 2, 1)) 打分
})
diseaseDFList.append(diseaseDF) 加到 diseaseDFList里
wei = set(classList) - set(nameList) 8个一级分类-查询到的一级分类
for i in wei:
diseaseDF = DiseaseDF(**{
"class_1": i,
"DF": 0.30 剩下的所有 默认打分是0.3
})
diseaseDFList.append(diseaseDF)
print(diseaseDFList)
return diseaseDFList