按特定键对python中的字典值求和
我有一个叫做“资产”的字典列表:按特定键对python中的字典值求和,python,dictionary,sum,Python,Dictionary,Sum,我有一个叫做“资产”的字典列表: assets = [ { "type": "site", "pcd_sector_id": 1, "cells": 3, "technology": "LTE" }, { "type": "site", "pcd_sector_id": 2, "cells": 5, "technology": "LTE-Advanced" }, { "type": "site", "pcd_sect
assets = [
{
"type": "site",
"pcd_sector_id": 1,
"cells": 3,
"technology": "LTE"
},
{
"type": "site",
"pcd_sector_id": 2,
"cells": 5,
"technology": "LTE-Advanced"
},
{
"type": "site",
"pcd_sector_id": 2,
"cells": 3,
"technology": "LTE"
}
]
我想对所有可能的技术的“单元”求和,它们都大于50。我看了很多问题,但我找不到任何基于字符串变量的和数值
我知道如何在Pandas中轻松实现这一点,但我正在寻找一个纯python解决方案
编辑:根据反馈,我对问题和数据做了一些更改。所需输出将具有每个邮政编码部门的按技术划分的单元数:
aggregated = [
{
"pcd_sector_id": 1,
"LTE": 3,
"LTE-Advanced": 0
}
{
"pcd_sector_id": 2,
"LTE": 3,
"LTE-Advanced": 5
}
]
您要做的是首先检索单个列表中的所有单元格项:
cells = [d['cells'] for d in assets]
# or
import operator
cells = map(operator.itemgetter('cells'), assets)
然后使用内置的求和函数求和:
sum(d['cells'] for d in assets)
# or
sum(map(operator.itemgetter('cells'), assets))
这两种方法都适用于较小的列表我认为顶部的方法会更快,但底部的方法对于较大的列表肯定更快:
$python3 -m timeit "assets = [{'cells': 1}] * 1000; import operator" "sum(d['cells'] for d in assets)"
10000 loops, best of 3: 67.4 usec per loop
$python3 -m timeit "assets = [{'cells': 1}] * 1000; import operator" "sum(map(operator.itemgetter('cells'), assets))"
10000 loops, best of 3: 47.5 usec per loop
您需要检索字典的特定列并对其进行汇总
count =0
for i in assets:
count = count + i['cells']
>>演示单线解决方案:
>>> sum([asset['cells'] for asset in assets])
你能提供你想要的输出吗?移除外部[]。否则,将生成一个临时列表,这是不必要的。