You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:37:31