首页 > 解决方案 > 过滤数据类列表以获取信息

问题描述

我有一个定义为的数据类

@dataclass
class UserInfo:
    name: str
    salary: int

我正在存储数据类列表

userList = [UserInfo(name: 'john', 'salary': 100000), UserInfo(name: 'rick', 'salary': 150000)]

现在我想知道 john 的薪水,如何在字符串中使用 oneliner 中的列表获取这些信息。

print(f"salary of john is {salary for user in userList if user.name == 'john'}") # somefilter needed for {}

标签: pythonlist

解决方案


我会做这样的事情

userList = [UserInfo(name='john', salary=100000), UserInfo(name='rick', salary=150000)]
salary = [user.salary for user in userList if user.name == 'john'][0]
print(f"salary of john is {salary}")

如果您要更频繁地使用这种按名称搜索列表的方式,我会覆盖数据类的__eq__方法

@dataclass
class UserInfo:
    name: str
    salary: int
    def  __eq__(self, other):
        if other == self.name:
            return True
        return False


if __name__ == "__main__":                       
    userList = [UserInfo(name='john', salary=100000), UserInfo(name='rick', salary=150000)]
    idx = userList.index('john')
    print(f"salary of john is {userList[idx].salary}")


推荐阅读