Python调用zip()处理字典筛选单病例国家代码报错求助
问题修复方案
错误原因分析
- 第一处错误:
cases = data['Total Cases'] == 1是将整个病例列表与数值1做全局相等判断,仅返回单个布尔值,不满足zip()要求的可迭代对象输入条件 - 第二处错误:
zip(names, cases)输出的是由(国家名, 对应病例数)元组组成的迭代器,转列表后是列表类型,无法通过字典键['Country']提取值
正确实现代码
按照要求使用zip()函数配对两个列表,筛选符合条件的国家:
def single_case_countries(data): # 取出国家列表和对应病例数列表 country_list = data['Country'] case_list = data['Total Cases'] result = [] # 用zip同时遍历两个列表,逐个判断 for country, cases in zip(country_list, case_list): if cases == 1: result.append(country) # 匹配之前的逻辑,没有符合条件的国家时打印提示 if not result: print('None found') return result
如果偏好更简洁的列表推导式写法,也可以写成:
def single_case_countries(data): result = [country for country, cases in zip(data['Country'], data['Total Cases']) if cases == 1] if not result: print('None found') return result
实现逻辑说明
zip()会按顺序将两个列表的对应位置元素配对,生成元组迭代器- 遍历迭代器时逐个判断病例数是否为1,符合条件就把对应的国家名加入结果列表
- 最后返回收集到的所有符合条件的国家名列表,空结果时打印提示和之前的统计函数逻辑保持一致
内容的提问来源于stack exchange,提问作者GR_ZA
相关产品推荐
相关产品推荐

