Python空数组报错及缺失字段显示no data的修复方案咨询
函数修复方案
修复后完整代码
data = [ { "firstname" : "Peter", "lastname" : "Doe", "class" : [ "economy_class" ] }, { "firstname" : "Jane", "lastname" : "Braun", "class" : [ "business_class" ] }, { "firstname" : "Peter", "lastname" : "Foo", "class" : [ "business_class", "economy_class" ] }, { "firstname" : "Jane", "lastname" : "Bar", "class" : [ "business_class" ] }, { "firstname" : " ", "lastname" : " ", "class" : [ " " ] } ] def list_persons(data): """返回包含每个分类下人员列表的字符串,分类和人员之间用换行符'\n'分隔 参数: persons -- 存储人员信息和所属分类的字典列表 """ # 空输入直接返回no data if not data: return "no data" class_set = set() valid_persons = [] # 过滤有效人员、收集所有有效分类 for dic in data: # 校验必填字段是否存在且值不为空 required_fields = ["firstname", "lastname", "class"] is_valid = True for field in required_fields: if field not in dic or str(dic[field]).strip() == "": is_valid = False break # 额外校验class字段为列表类型 if not isinstance(dic["class"], list): is_valid = False if is_valid: valid_persons.append(dic) for c in dic["class"]: if str(c).strip(): class_set.add(c) # 无有效分类时返回no data if not class_set: return "no data" result_lines = [] # 按分类排序输出 for cls in sorted(class_set): # 筛选当前分类下的人员,按姓氏排序 subjects = sorted( [p for p in valid_persons if cls in p["class"]], key=lambda x: x["lastname"] ) if not subjects: result_lines.append(f"{cls}: no data") continue # 拼接姓名,按全名字典序排序 names = sorted([f"{p['firstname']} {p['lastname']}" for p in subjects]) result_lines.append(f"{cls}: {', '.join(names)}") return "\n".join(result_lines) # 测试调用示例 if __name__ == "__main__": # 正常数据测试 print("正常数据输出:") print(list_persons(data)) print("\n空数组测试:") print(list_persons([])) print("\n无有效数据测试:") print(list_persons([{"firstname": "", "lastname": "", "class": ["economy_class"]}]))
核心修改点
- 新增空输入校验:函数入口判断传入的数组为空时直接返回
no data - 新增字段合法性校验:每条数据会校验
firstname/lastname/class三个必填字段是否存在,且去空格后不为空,不满足条件的无效数据会被过滤 - 修复原代码排序逻辑缺陷:原代码按姓名第5位字符排序的逻辑存在索引越界风险,修改为按姓氏字典序排序,符合常规使用逻辑
- 新增空分类提示:如果某个分类下没有有效人员,会输出
分类名: no data - 对齐函数文档约定:原函数文档说明返回字符串,原代码直接打印结果,修改为拼接结果字符串后返回,和文档描述一致
内容的提问来源于stack exchange,提问作者Val.Val
相关产品推荐
相关产品推荐

