如何对值为列表的Python字典进行数据过滤并实现分类求和
实现方法
纯原生Python实现(无需第三方库)
直接通过生成器表达式遍历索引匹配条件累加即可,代码如下:
bd = { 'portfolio': ['long_term', 'medium_term', 'short_term', 'long_term', 'short_term'], 'asset_type':['stock', 'etf', 'bonds', 'bonds', 'stock'], 'value':[2000, 3000, 5000, 8000, 1000] } # 统计portfolio为long_term的value总和 long_term_total = sum(val for idx, val in enumerate(bd['value']) if bd['portfolio'][idx] == 'long_term') # 统计asset_type为stock的value总和 stock_total = sum(val for idx, val in enumerate(bd['value']) if bd['asset_type'][idx] == 'stock') print(long_term_total) # 输出 10000 print(stock_total) # 输出 3000
如果需要高频做同类统计,可以封装通用函数简化调用:
def calc_filtered_sum(filter_field, filter_value, data): return sum( val for idx, val in enumerate(data['value']) if data[filter_field][idx] == filter_value ) long_term_total = calc_filtered_sum('portfolio', 'long_term', bd) stock_total = calc_filtered_sum('asset_type', 'stock', bd)
可选:pandas实现(适合复杂统计场景)
如果允许引入第三方库,用pandas处理结构化数据会更简洁:
import pandas as pd df = pd.DataFrame(bd) long_term_total = df[df['portfolio'] == 'long_term']['value'].sum() stock_total = df[df['asset_type'] == 'stock']['value'].sum()
内容的提问来源于stack exchange,提问作者CaZ
相关产品推荐
相关产品推荐

