You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除字典中女性条目并计算男性平均身高?解决代码报错

解决方案

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:05:13