如何实现Person列表按姓名排序并同步排序每个对象的hobbies列表?
解决方法
你需要在排序人员列表之前,先对每个Person对象的hobbies列表进行排序,同时修正代码中属性名的笔误(x.names应该是x.name)。
修改后的代码
def sort_people_and_hobbies(people: list) -> list: # 遍历每个Person,对hobbies进行原地字母序排序 for p in people: p.hobbies.sort() # 按姓名的字母序排序人员列表并返回 return sorted(people, key=lambda x: x.name)
代码说明
- hobbies排序:调用
p.hobbies.sort()会原地修改每个Person对象的hobbies列表,使其按字母序排列,这符合你预期的print(person1.hobbies)输出结果。 - 人员列表排序:使用
sorted()函数,以x.name为排序键,返回按姓名字母序排列的新列表。 - 笔误修正:原代码中的
x.names是错误的,Person类的属性是name,需改为x.name。
可选方案(不修改原对象)
如果你不想修改原Person对象的hobbies,可以创建新的Person实例来保存排序后的hobbies:
def sort_people_and_hobbies(people: list) -> list: processed = [] for p in people: # 创建新Person,hobbies用排序后的新列表 processed.append(Person(p.name, sorted(p.hobbies))) # 按姓名排序 return sorted(processed, key=lambda x: x.name)
内容的提问来源于stack exchange,提问作者fallguy
相关产品推荐
相关产品推荐

