2017-08-27 38 views
1

所以我有我的pymongo游标和非常简单的循环来获取总和。我需要获取这个价值,我对Mongo也很陌生,而且我的方法可能不是最佳做法。在列表理解中的Lambda表达式Python

cursor = db.reportsColl.aggregate([ 
     {"$unwind": "$conditions"}, 
     {"$group": {"_id": "$_id", "sum": { "$sum": 1}}}]) 


x = 0 
for result in cursor: 
    x+= result['sum'] 
print(x) 

我想在这里使用lambda表达式,但我觉得我有点失落。

total = [(lambda x: x+result['sum'])(x) for _ in cursor] 

任何想法?

+2

你的意思是这样'总= SUM(结果['sum']为游标结果)# – AChampion

+0

@Champion肯定!我第一次做不到这一点......谢谢。 –

+1

@AliceJarmusch对你在这里做的事情有些困惑...你不能修改你的查询并且让mongo做,而不是在Python中进行后处理?虽然,我不知道你是否想要获得团体的数量,或其他什么... –

回答

2

你正在建立一个不完整的总和清单,这是一种浪费。不要使用列表理解的副作用。

你甚至不需要这样做。使用sum() functiongenerator expression代替:

total = sum(result['sum'] for result in cursor) 
0

你只想要做的是SUM。

所以,你可以尝试做遵循此:

In [9]: sum([1, 2, 3]) 
Out[9]: 6` 

所以,通过这种方式,你的代码可以是这样的:

total = sum([result['sum'] for result in cursor]) 
+1

删除''[]]括号,没有必要先创建一个列表来总结内容。改为使用生成器表达式。 –