我有一个dicts列表,现在我正在尝试查找每个远程标识符的总作业。
在这种情况下,我希望标识为64 -> 11 jobs
和68 -> 0 jobs
[{
'jobs': {
'count': 4
},
'remote_identifier': {
'id': '64'
}
}, {
'jobs': {
'count': 0
},
'remote_identifier': {
'id': '68'
}
}, {
'jobs': {
'count': 7
},
'remote_identifier': {
'id': '64'
}
}]
我已经尝试了类似的东西,但我不知道如何根据我的需要调整它,因为这只计算出现次数。
from collections import Counter
print Counter(item['remote_identifier']['id'] for item in items )
答案 0 :(得分:3)
非常直接的defaultdict
。 (data
是您的原始列表。)
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>>
>>> for d_inner in data:
... id_ = d_inner['remote_identifier']['id']
... d[int(id_)] += d_inner['jobs']['count']
...
>>> d
defaultdict(<type 'int'>, {64: 11, 68: 0})
答案 1 :(得分:1)
您可以使用defaultdict来累计计数:
from collections import defaultdict
jobs = [{
'jobs': {
'count': 4
},
'remote_identifier': {
'id': '64'
}
}, {
'jobs': {
'count': 0
},
'remote_identifier': {
'id': '68'
}
}, {
'jobs': {
'count': 7
},
'remote_identifier': {
'id': '64'
}
}]
counts = defaultdict(int)
for job in jobs:
counts[job['remote_identifier']['id']] += job['jobs']['count']
print(counts)
输出:
defaultdict(<class 'int'>, {'64': 11, '68': 0})
答案 2 :(得分:1)
最简单的方法是使用import itertools as it
def get_id(entry):
return entry['remote_identifier']['id']
data.sort(key=get_id)
for key, group in it.groupby(data, get_id):
print(key, sum(entry['jobs']['count'] for entry in group))
模块,该模块提供函数groupby
。
use test
db.grantRolesToUser("user1", [ "readWrite"] )
请注意,identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
假定数据已按您用于对数据中元素进行分组的键进行排序。
答案 3 :(得分:0)
这应该可以解决问题:
result = {}
for i in items:
ri = i['remote_identifier']['id']
j = i['jobs']['count']
if ri in result:
result[ri] += j
else:
result[ri] = j
result
#{'68': 0, '64': 11}
答案 4 :(得分:0)
另一种解决方案如下:
input = [{
'jobs': {
'count': 4
},
'remote_identifier': {
'id': '64'
}
}, {
'jobs': {
'count': 0
},
'remote_identifier': {
'id': '68'
}
}, {
'jobs': {
'count': 7
},
'remote_identifier': {
'id': '64'
}
}]
res = dict()
for item in input:
if item['remote_identifier']['id'] in res:
total = res[item['remote_identifier']['id']] + item['jobs']['count']
else:
total = item['jobs']['count']
res.update({item['remote_identifier']['id']: total})
print res
<强>输出:强>
{'68': 0, '64': 11}