input={1:5,2:8,9:3,11:4,18:3,21:4,3:8}
我想按操作进行分组并在
上执行求和操作那些字典中的值..
like grp_1=1,2,3 ; grp_2=9,11,18 ; grp_3= 21
并且输出应该如下所示
grp_1= 21 (5+8+8 dict values)
grp_2= 10 (3+4+3 dict values)
grp_3= 4
请向我们推荐简单的方法。
答案 0 :(得分:0)
从示例中,我想您想在键排序的字典上形成恒定大小的组。在这种情况下,您可以首先对键进行排序,获取值,生成所需大小的块并将每个块求和。我无法在标准库中找到能够从迭代器生成块的工具,因此我在这里使用了here所建议的more_itertools
模块。
import more_itertools as mit
d = {1: 5, 2: 8, 9: 3, 11: 4, 18: 3, 21: 4, 3: 8}
group_sums = list(map(
sum,
mit.more.chunked(
(d[k] for k in sorted(d.keys())),
3
)
))
答案 1 :(得分:0)
我将执行以下操作:
import pandas as pd
# initial data
sr = pd.Series({1:5,2:8,9:3,11:4,18:3,21:4,3:8})
groups = [[1,2,3],[9,11,18],[21]]
# we will save the sums in this list
finalsum = []
for i in groups:
finalsum.append(sr[sr.index.isin(i)].sum())
因此groups[0]
的总和为finalsum[0]
,依此类推。