我有一本字典词典。我想算一下这些词典中有多少具有元素和#34;状态"设置为"连接"。
这是我的工作代码:
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添加到连接中,这正是我所期望的。
答案 0 :(得分:7)
您可以在sum
函数中使用生成器表达式:
sum(x["status"]=="connecting" for x in self.servers.values())
请注意,由于x["status"]=="connecting"
的结果是一个布尔值,如果它是True,python会将其评估为1,所以最后它将返回符合条件的字典数。
答案 1 :(得分:2)
您可以使用sum
。您已经具有列表推导,因此只需将其包装在sum
。
connecting = sum(1 for x in self.servers if self.servers[x]["status"] == "closed")
答案 2 :(得分:1)
如果您想要计算所有状态类型:
import collections
statuscounts = collections.Counter(server['status'] for server in self.servers.values())
connecting = statuscounts['connecting']
答案 3 :(得分:0)
我愿意
connecting = len([1 for i in self.servers if self.servers[i]["status"] == "connecting"])
我使用len
,因为它具有复杂度O(1)vs sum
,其复杂度为O(n)因为汇总只有1
的列表与得到它的长度相同< / p>