Python 如何压缩此文件?

Python 如何压缩此文件?,python,dictionary,Python,Dictionary,我有一本词典。我想计算有多少字典将元素“status”设置为“connecting” 这是我的工作代码: connecting = 0 for x in self.servers: if self.servers[x]["status"] == "connecting": connecting += 1 有什么办法可以压缩这个吗?我的想法是: connecting = [1 if self.servers[x]["status"] == "closed" else 0 for x in

我有一本词典。我想计算有多少字典将元素“status”设置为“connecting”

这是我的工作代码:

connecting = 0
for x in self.servers:
    if self.servers[x]["status"] == "connecting": connecting += 1
有什么办法可以压缩这个吗?我的想法是:

connecting = [1 if self.servers[x]["status"] == "closed" else 0 for x in self.servers]

但它只是返回一个0和1的列表,并没有将1添加到连接中,这是我所期望的。

您可以使用
sum
。您已经理解了列表,所以只需将其包装在
sum
中即可

connecting = sum(1 for x in self.servers if self.servers[x]["status"] == "closed")

您可以在
sum
函数中使用生成器表达式:

sum(x["status"]=="connecting" for x in self.servers.values()) 
请注意,由于
x[“status”]=“connecting”
的结果是一个布尔值,如果为真,python会将其计算为1,因此最终它将返回符合您的条件的字典数。

connecting = len([1 for i in self.servers if self.servers[i]["status"] == "connecting"])

我使用了
len
,因为它的复杂性为O(1),而
sum
的复杂性为O(n),因为求和一个
1
列表的长度与求和相同,以防您想计算所有的状态类型:

import collections

statuscounts = collections.Counter(server['status'] for server in self.servers.values())

connecting = statuscounts['connecting']
首先,您仍然具有构建列表的O(n)复杂性,因此这并不比使用
sum
更快。