Python 如何压缩此文件?
我有一本词典。我想计算有多少字典将元素“status”设置为“connecting” 这是我的工作代码: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
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
更快。