如何
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(