为什么我的 for 循环不计算 Python 字典中等于"在线"的正确数量的值?



我正在计算状态为在线的人数。我创建了一个字典,还创建了一个计数变量来跟踪在线的人。下面是我的代码和错误日志。在下面的代码中,我期望count为2。

class Solution(object):
def getStatus(self, status):
count = 0
for k, v in status.items():
# I even tried to used json.load(status) to parse but it doesn't help
if status[k].key() == "Online":
count += 1
else:
pass
return count

if __name__ == "__main__":
statuses = {
"Alice": "online",
"Bob": "offline",
"Eve": "online",
}
print(Solution().getStatus(statuses))

下面是我的错误日志

if status[k].key() == "Online":
AttributeError: 'str' object has no attribute 'key'

如果你想检查这个值,你可以使用变量v

访问它可以用

if v == "online":

不是

if status[k].key() == "Online":

为什么会出现错误?

status[k]字符串它是字典中的值,所以你不能对它调用key()函数。要验证这一点,只需在循环中打印status[k]即可观察到这一点。

在你的循环中,k将是Alice, Bob等,v将是" online ";或";offline"。没有需要调用的key()函数

例如:

if v == 'online':
....

可以。请注意,求值是区分大小写的,并且您的示例中有混合大小写,因此需要保持一致。

说了这么多,你应该使用的是操作符。countOf,这更简单:

>>> statuses = {
...         "Alice": "online",
...         "Bob": "offline",
...         "Eve": "online",
... }
>>> from operator import countOf
>>> countOf(statuses.values(), 'online')
2
>>> countOf(statuses.values(), 'offline')
1

最新更新