如何为Python中的Person类实现联系人列表A-Z排序功能?
嘿,我来帮你实现联系人的A-Z排序功能!其实很简单,咱们分几步来搞定:
1. 选择排序依据和实现方式
Python的列表排序很灵活,有两种常用方式来给你的Person实例排序:
方式一:给Person类添加比较方法(一劳永逸)
如果希望默认就按姓氏(或者你想要的字段)排序,可以给Person类添加__lt__方法(小于比较逻辑),这样调用contacts.sort()时会自动用这个规则排序:
import os # 别忘了导入os模块,你原来的代码里用到了它 class Person: def __init__(self, first, last, age, phone_number): self.first = first self.last = last self.age = age self.phone_number = phone_number def full_name(self): return f'{self.first} {self.last}' def __str__(self): return f"{self.first} {self.last} : {self.age} : {self.phone_number}" # 添加小于比较方法,按姓氏A-Z排序(转小写避免大小写干扰排序结果) def __lt__(self, other): return self.last.lower() < other.last.lower()
方式二:调用sort时指定排序键(更灵活)
如果你不想修改Person类,或者偶尔需要按不同字段排序(比如全名),可以直接在调用sort时用key参数自定义排序依据:
# 按姓氏排序(不区分大小写) contacts.sort(key=lambda person: person.last.lower()) # 按全名排序(不区分大小写) contacts.sort(key=lambda person: person.full_name().lower())
2. 排序后保存到CSV文件
排序完联系人列表后,需要把新的顺序写入CSV文件覆盖原来的内容,咱们写个简单的保存函数:
def save_contacts(contacts, filename="contacts.csv"): with open(filename, "w") as f: for contact in contacts: # 按CSV格式拼接每一行数据 line = f"{contact.first},{contact.last},{contact.age},{contact.phone_number}\n" f.write(line)
3. 整合到你的流程里
当你添加新联系人后,只需要先执行排序,再调用保存函数,就能让列表和CSV文件都保持有序:
# 示例:添加新联系人 new_contact = Person("Alice", "Smith", "28", "987-6543") contacts.append(new_contact) # 排序(二选一:如果用了方式一就直接sort,方式二就用带key的sort) contacts.sort() # 对应方式一的默认排序 # 或者 contacts.sort(key=lambda p: p.last.lower()) 对应方式二的自定义排序 # 保存到CSV文件 save_contacts(contacts)
这样每次添加新联系人后,你的contacts列表会自动保持A-Z排序,CSV文件也会同步更新啦!
内容的提问来源于stack exchange,提问作者ItchyPrune
相关产品推荐
相关产品推荐

