假设我有一个用户列表,其中每个元素表示另一个用户数据列表,如下所示:

users = [
    ["name1", 24, "address1"],
    ["name2", 54, "address2"],
    ["name3", 32, "address3"]
]

要想了解第一个用户的年龄,我必须这样做:

print(users[0][1])

输出:

24

但是,我想要一种方法,将每个列表元素转换为用户对象,以便更容易访问,例如:

print(user1.age)

输出:

24

处理我的情况的最佳方式是什么?我基本上只是想用一种更简单的方式从一堆列表中访问用户数据.

推荐答案

您正在寻找Python中的namedtuple类型.

https://docs.python.org/3/library/collections.html

from collections import namedtuple

User = namedtuple('User', ['name','age','address'] )

users = [
    # name # age # address
    ["name1", 24, "address1"],
    ["name2", 54, "address2"],
    ["name3", 32, "address3"]
]

users = [User(*k) for k in users]
print(users)
print(users[0].age)

输出:

[User(name='name1', age=24, address='address1'), User(name='name2', age=54, address='address2'), User(name='name3', age=32, address='address3')]
24

Python相关问答推荐

@Property方法上的inspect.getmembers出现意外行为,引发异常

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

抓取rotowire MLB球员新闻并使用Python形成表格

查找两极rame中组之间的所有差异

如何让Flask 中的请求标签发挥作用

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

为什么默认情况下所有Python类都是可调用的?

ThreadPoolExecutor和单个线程的超时

在pandas中使用group_by,但有条件

提取相关行的最快方法—pandas

如何更新pandas DataFrame上列标题的de值?

在matplotlib中删除子图之间的间隙_mosaic

重置PD帧中的值

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

如何在一组行中找到循环?

如何在Django模板中显示串行化器错误

利用SCIPY沿第一轴对数组进行内插

将数字数组添加到Pandas DataFrame的单元格依赖于初始化

生产者/消费者-Queue.get by list