从值python3中类的属性获取字典键

2024-04-19 22:52:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的服务器有一个用户类:

class User():
    def __init__(self, username, password, group, join_date):
        self.password = password
        self.group = group
        self.join_date = join_date

我还有一本字典,以用户ID作为键。添加用户的格式为:

users = {
    1443: User("Bob", "my_password", "admin", "June 23")
}

我的问题是当用户登录到他们的帐户时:

username = input()
password = getpass.getpass()

我想要的是:

if username in users:
    if users[username].password == password

我不能这样做,因为我不知道如何从用户的用户名中获取用户ID,因为它嵌入在一个对象中。有什么想法或建议吗?我不熟悉身份验证/授权


Tags: 用户self服务器iddateifdefgroup
1条回答
网友
1楼 · 发布于 2024-04-19 22:52:31

你有两个选择;循环遍历所有对象并找到与登录名匹配的用户,或者从username映射到userid,或者直接映射到user对象

循环需要对users字典的所有值进行线性搜索:

for user in users:
    if user.username == username and user.password == password:
        # success!

您可以生成一次从username到userid的映射,然后使用该映射:

usernames = {user.username: userid for userid, user in users.items()}

然后使用:

if username in usernames:
    userid = usernames[username]
    if users[userid].password == password

这比每次线性搜索快得多,映射中的直接查找是O(1)常数时间查找

您可以直接将映射点设置为用户对象:

usernames = {user.username: user for userid, user in users.items()}

如果您的程序添加或删除用户,您也需要维护这个额外的映射

相关问题 更多 >