Python多条件排序报错:comp2()缺少必需的位置参数'b'如何解决?
错误原因分析
Python 3的list.sort()方法的key参数仅接受单输入参数的函数,你定义的comp2是双参数的比较函数,直接传入就会触发缺参数报错。如果要使用自定义比较函数,需要先导入functools.cmp_to_key把比较函数包装后再传入,但就算改了这里,原有逻辑也只实现了按城市排序,没有覆盖同城市按时间升序、按原始顺序输出结果的需求。
正确实现逻辑
- 先解析所有条目,提取扩展名、城市、时间戳,同时保留条目的原始索引,确保最终输出顺序和输入顺序一致
- 按城市对条目分组,每组内按时间戳升序排序,给每个条目分配组内序号(从1开始计数)
- 按原始索引还原条目顺序,拼接成要求的文件名格式
完整实现代码
from collections import defaultdict def solution(S): entries = S.splitlines() parsed_items = [] # 解析所有字段 for origin_idx, line in enumerate(entries): file_name, city, time_str = line.split(",") ext = file_name.strip().split(".")[-1] parsed_items.append({ "city": city.strip(), "ext": ext, "time": time_str.strip(), "origin_idx": origin_idx }) # 按城市分组 city_groups = defaultdict(list) for item in parsed_items: city_groups[item["city"]].append(item) # 同城市按时间升序排序,分配序号 for city in city_groups: city_groups[city].sort(key=lambda x: x["time"]) for seq, item in enumerate(city_groups[city], start=1): item["seq"] = seq # 按原始索引排序,拼接最终结果 parsed_items.sort(key=lambda x: x["origin_idx"]) result = [f"{item['city']}{item['seq']}.{item['ext']}" for item in parsed_items] return "\n".join(result)
测试效果
输入样例字符串:
A = "photo.jpeg, Warsaw,2013-09-05 14:08:15\njohn.png, London, 2015-06-20 15:13:22\nmyFriends.png, Warsaw, 2013-09-05 14:07:13" print(solution(A))
输出和预期完全一致:
Warsaw2.jpeg London1.png Warsaw1.jpeg
如果你坚持使用双参数比较函数的写法,可以参考修改:
- 导入
from functools import cmp_to_key- 排序语句改为
entries.sort(key=cmp_to_key(comp2))
但这种方式仅能完成按城市聚合排序,后续仍需补充同城市按时间排序、分配序号、还原原始输入顺序的逻辑,效率和可读性都低于分组实现方案。
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

