从一本旧字典中创建一本新字典,按十年对关键年份进行分组,并找出范围的平均值

2024-04-25 03:36:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用一本旧字典编一本新字典。我想在几十年内对键进行分组,并找到每个新键的平均值。你知道吗

d={1850:1,1851:2,1853:3,1854:2,1860:5,1861:6,1862:0,1865:1}
av=0
i=0
new_dict={}
a=1850
total=0
for key, value in d.items():
        if key in range(a,a+10):
            total=total+value
            i=i+1
        av=total/i
        new_key=(a,a+10)
        new_dict[new_key]=av
        a=a+10
        if a>1870:
            break

print(new_dict)

我希望我的结果是这样的:

new_dict={(1850,1860):2,(1860,1865):3}

我希望最后一个组/键到达最后一年并关闭该组。你知道吗

但首先我很难分配平均值。我的结果是:

{(1850, 1860): 1.0, (1860, 1870): 1.0, (1870, 1880): 1.0}

Tags: keyinnewforif字典valueitems
1条回答
网友
1楼 · 发布于 2024-04-25 03:36:29

您可以使用^{}将计数按十年分组,同时跟踪沿途的最大年份值。然后,计算每十年的平均值,根据需要使用上一年。你知道吗

请注意,没有相应的第一年调整,这不在您的规范中,但如果需要,可以按照与去年相同的策略轻松添加(找到全局最小年,然后使用全局最小年和当前年的最大值作为每个元组范围中的第一项)。你知道吗

from collections import defaultdict

d = {1850: 1, 1851: 2, 1853: 3, 1854: 2, 1860: 5, 1861: 6, 1862: 0, 1865: 1}
group_size = 10
by_decade = defaultdict(list)
last_year = 0

for year, count in d.items():
    by_decade[year//group_size*group_size].append(count)
    last_year = max(last_year, year)

avg_by_decade = {
    (year, min(last_year, year + group_size)): sum(counts) / len(counts) 
    for year, counts in by_decade.items()
}

print(avg_by_decade) # => {(1850, 1860): 2.0, (1860, 1865): 3.0}

相关问题 更多 >