如何在Python中实现类Fortran派生类型的人员信息索引存储与访问?
Python实现类似Fortran派生类型的人员信息存储方案
方法一:字典列表(快速上手)
直接用列表存储字典,每个字典对应一个人员的所有信息,键名对应你需要的信息缩写(name、id、tel等)。通过列表索引i定位人员,再通过字典键获取对应信息。
示例代码:
# 创建人员列表 people = [ {"name": "张三", "id": "110101199001011234", "tel": "13800138000", "addr": "北京市朝阳区", "email": "zhangsan@example.com"}, {"name": "李四", "id": "310101199505056789", "tel": "13900139000", "addr": "上海市浦东新区", "email": "lisi@example.com"} ] # 访问第0个人员的姓名 print(people[0]["name"]) # 访问第1个人员的电话 print(people[1]["tel"])
方法二:自定义类(最接近Fortran派生类型体验)
定义一个Person类,将姓名、身份证号等信息作为类的属性。把每个人员的实例存入列表,就能通过list[i].属性名的方式访问,和Fortran的list(i)%属性名写法逻辑完全一致。
示例代码:
class Person: def __init__(self, name, id_card, tel, addr, email): self.name = name self.id = id_card # 避免和内置id函数重名 self.tel = tel self.addr = addr self.email = email # 创建人员列表 people = [ Person("张三", "110101199001011234", "13800138000", "北京市朝阳区", "zhangsan@example.com"), Person("李四", "310101199505056789", "13900139000", "上海市浦东新区", "lisi@example.com") ] # 访问第0个人员的姓名 print(people[0].name) # 访问第1个人员的身份证号 print(people[1].id)
方法三:dataclass(Python 3.7+,简洁高效)
使用Python标准库的dataclasses模块,无需手动编写__init__方法,就能快速定义结构化的人员类,用法和自定义类一致,代码更简洁。
示例代码:
from dataclasses import dataclass @dataclass class Person: name: str id: str tel: str addr: str email: str # 创建人员列表 people = [ Person("张三", "110101199001011234", "13800138000", "北京市朝阳区", "zhangsan@example.com"), Person("李四", "310101199505056789", "13900139000", "上海市浦东新区", "lisi@example.com") ] # 访问第0个人员的邮箱 print(people[0].email) # 访问第1个人员的地址 print(people[1].addr)
选择建议
- 如果只是临时存储简单数据,字典列表足够用,无需额外定义类;
- 如果需要更严谨的结构、类型约束,或者要给人员添加方法,优先用自定义类或dataclass,后者更适合纯数据存储的场景。
内容的提问来源于stack exchange,提问作者Oxlo
相关产品推荐
相关产品推荐

