为什么我的for循环没有计算出Python字典中等于'Online'的值的正确个数?

z4iuyo4d  于 2023-01-14  发布在  Python
关注(0)|答案(2)|浏览(137)

我正在尝试计算状态为在线的人数。我讨厌创建字典,也创建了一个计数变量来跟踪在线的人。下面是我的代码和错误日志。在下面的代码中,我希望计数为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'
hof1towb

hof1towb1#

如果要检查该值,可以使用变量v访问它
您可以使用

if v == "online":

代替

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

为什么会出现错误?
status[k]string,它是dict中的值,所以你不能在它上面调用函数key()。要验证这一点,只需在你的循环中打印status[k]来观察这一点。

dsekswqp

dsekswqp2#

在循环中,k将代表Alice、Bob等,v将代表"online"或"offline",不需要调用key()函数。
例如:

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

注意,计算是区分大小写的,而您的示例是混合大小写的,因此需要保持一致。
话虽如此,您应该使用的是operator.countOf,它要简单得多:

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

相关问题