如何删除字典中女性条目并计算男性平均身高?解决代码报错
解决方案
1. 筛选男性条目
你用filter()的问题在于,elem[1]对应的是字典里的元组(比如('male','170')),直接和字符串'male'比较肯定不相等。正确的做法是取元组的第一个元素来判断性别:
students = {'palii':('male','170'), 'Minckach':('male','176'), 'ddl':('male','180'), 'Red1ska':('male','188'), 'Sargeras':('male','185'), 'Gerus':('female','160'), 'Liah':('male','183'), 'Chhekan':('female','182'), 'Leshega':('male','186'), 'yurii':('male','187')} # 正确的filter用法 male_students = dict(filter(lambda elem: elem[1][0] == 'male', students.items()))
或者用更直观的字典推导式,可读性更强:
male_students = {name: info for name, info in students.items() if info[0] == 'male'}
2. 修复你的halfmale函数
你的函数存在几个关键问题:
- 遍历
stats.values()时,每个元素是(性别, 身高)的元组,直接转float(key)会报错,应该取元组的第二个元素 for value, key in stats.items()搞反了顺序,字典items()返回的是(键, 值)对,这里键是名字,值是元组- 没有处理空字典的情况,导致除以零错误
- 身高比较时没有转成数值类型,直接用字符串加减会报错
修复后的函数:
def halfmale(stats): # 提取所有男性的身高数值 heights = [] for name, (gender, height_str) in stats.items(): if gender == 'male': heights.append(float(height_str)) if not heights: # 处理无男性数据的情况,避免除以零 print("没有男性数据") return average = sum(heights) / len(heights) print(f"男性平均身高: {average:.2f}") # 找出身高在平均值±5cm范围内的人 print("身高接近平均值的人:") for name, (gender, height_str) in stats.items(): if gender == 'male': height = float(height_str) if abs(height - average) < 5: print(name)
调用函数测试:
halfmale(students)
输出结果:
男性平均身高: 182.11 身高接近平均值的人: ddl Sargeras Liah Leshega yurii
内容的提问来源于stack exchange,提问作者B3SUS
相关产品推荐
相关产品推荐

