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

Python 为什么打印(users_dict.get(“bob”)和打印(users_dict.get(users[0].username))打印不同的结果?,python,Python,怎么做 print(users_dict.get("bob")) 及 打印不同的值 用户类在这里 class User: def __init__(self, _id, username, password): self.id = _id, self.username = username, self.password = password 如果仔细查看printusers_dict的输出,它是: {'bob',:,'John',:,'

怎么做

print(users_dict.get("bob"))

打印不同的值

用户类在这里

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

如果仔细查看printusers_dict的输出,它是:

{'bob',:,'John',:,'Dan',:}

您会注意到,键不是“bob”,而是“bob”,。这是因为类定义中的逗号:

self.username=用户名

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

在后面有一个逗号

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

如果打印用户[1],则可以看到它。用户名:


因此,当get无法找到键“John”时,它将返回其默认值None,这是因为该键与您可以通过打印看到的键不同
printusers_dict

与前面提到的其他答案一样,它是一个元组,而不是一个用于进行比较的字符串

首先,如果我们看一下这本词典的关键词:

print(users_dict.keys())
# dict_keys([('bob',), ('John',), ('Dan',)])
每个键都是一个元组。因此,比较一下:

print(users_dict.get( ('bob',) ))
# gives out: <__main__.User ...>
希望这有帮助

('John',)  # that's a tuple!
print(users_dict.keys())
# dict_keys([('bob',), ('John',), ('Dan',)])
print(users_dict.get( ('bob',) ))
# gives out: <__main__.User ...>