给定一个对象列表,我试图根据给定的属性和基于该属性的表达式按降序排列对象。 我的函数被传递了一个参数,这个参数将是我用来比较的属性。我想计算所选营养素属性与卡路里属性的比率,例如(x.nutrient/x.calorie)。现在有几个边缘案件我不得不厌倦。第一个x卡路里可能是零。第二个x.nutrient可能是<;1.0,这将提供错误的结果,因为我希望x.nutrient的比率按降序给出x.carorie。如果您知道一种比使用if语句从函数参数中选择属性更好的方法,则可以获得额外的积分。例如,营养素可能是[脂肪、碳水化合物、蛋白质],如果我的功能被传递,营养素=脂肪,x.nutrient!=x.脂肪。食品类数据成员,名称,蛋白质,碳水化合物,脂肪,热量,派系,蛋白质热量,碳水化合物热量,脂肪热量。我想根据给定营养素的卡路里百分比(“蛋白质”、“碳水化合物”或“脂肪”)对食物列表进行排序,列表需要进行适当的排序。你知道吗
我试过使用attrgetter,它不允许我划分属性。我尝试了一个lambda函数,在该函数中我缩放了值,并进行了规范化,但仍然没有按正确的顺序对列表进行排序。你知道吗
def sort_food_list(foods, nutrient):
if nutrient == 'protein':
foods.sort(key=lambda x: (x.protein * 100) / x.calories if (x.calories * 100) != 0 else 0, reverse=True)
if nutrient == 'carbs':
foods.sort(key=lambda x: (x.carbs * 100) / (x.calories * 100) if x.calories != 0 else 0, reverse=True)
if nutrient == 'fat':
foods.sort(key=lambda x: (x.fat * 100) / (x.calories * 100) if x.calories != 0 else 0, reverse=True)
试试下面的代码。它涵盖了你提出的大部分观点。你知道吗
相关问题 更多 >
编程相关推荐