为什么print(users_dict.get("bob")和print(users_dict.get(users[0].username))打印不同的结果?



如何

print(users_dict.get("bob"))

print(users_dict.get(users[0].username)) 

打印不同的值?

User课在这里

class User:
def __init__(self, _id, username, password):
self.id = _id,
self.username = username,
self.password = password
from user import User

users = [
User(1, "bob", "123"),
User(2, 'John', '456'),
User(3, "Dan", '789')
]

users_dict = {u.username: u for u in users}

print(users_dict.get("bob"))      # prints None
print(users_dict.get(users[0].username))  # prints <user.User object at 0x7f29efa61f60>

,

self.username = username,

因此,您将self.username定义为包含一个项目的元组,username.请注意,逗号构成元组,而不是括号。

如果您print(users[1].username),则可以看到它:

('John',)  # that's a tuple!

因此,由于get找不到键'John',它返回其默认值None

如果你仔细看一下print(users_dict)的输出,它是:

{('bob',): <__main__.User object at 0x7f13c4d52e50>, ('John',): <__main__.User object at 0x7f13c4da49a0>, ('Dan',): <__main__.User object at 0x7f13c4cce790>}

你会注意到密钥不是'bob',而是('bob',)。这是因为类定义中的逗号:

self.username = username,

(当然前一行的逗号也是错误的(。

就像其他答案提到的一样,它是一个元组,而不是您应该用来进行比较的字符串。

首先,如果我们看一下这个字典的 keys((:

print(users_dict.keys())
# dict_keys([('bob',), ('John',), ('Dan',)])

每个键都是一个元组。因此,要比较一下:

print(users_dict.get( ('bob',) ))
# gives out: <__main__.User ...>

希望这有帮助!

这是因为键不同,您可以通过打印看到 打印(users_dict(

最新更新