You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算嵌套字典中各书籍非零评分的总和与平均值?

解决每本书非零评分总和与平均值计算问题

我来帮你搞定这个问题~你的代码核心问题是没有针对每本书单独统计非零评分的数量,用了一个全局的count变量,导致所有书的有效评分都混在一起,自然没法算出每本书的正确平均值。另外内层遍历books的循环也是多余的,咱们一步步修正:

先看你的原始代码问题点

books = ['book1', 'book2', 'book3']
biglist = [{'user1' : {'book1' : 0, 'book2' : -2, 'book3' : 3}}, {'user2' : {'book1' : 5, 'book2' : 0, 'book3' : -3}}, {'user3' : {'book1' : 1, 'book2' : 5, 'book3' : 3}}]
total = dict()
count = 0
for list_item in biglist:
    for key, value in list_item.items():
        for key2, value2 in value.items():
            total[key2] = value2 + total.get(key2,0)
            for book in books:
                if value2 != 0 and book == key2:
                    count += 1
                    print(f"Found non-zero value, [{key2} : {value2}]")
  • count是全局变量,所有书的非零评分都累加在这里,无法区分每本书的有效评分数量
  • 内层遍历books完全多余,key2本身就是当前处理的书名,直接判断value2 !=0即可

修正后的代码

我们需要用两个字典分别记录每本书的非零评分总和、有效评分数量,这样每本书的数据是独立的:

books = ['book1', 'book2', 'book3']
biglist = [{'user1' : {'book1' : 0, 'book2' : -2, 'book3' : 3}}, 
           {'user2' : {'book1' : 5, 'book2' : 0, 'book3' : -3}}, 
           {'user3' : {'book1' : 1, 'book2' : 5, 'book3' : 3}}]

# 初始化两个字典,分别存每本书的非零评分总和、有效评分数量
total_non_zero = {book: 0 for book in books}
count_non_zero = {book: 0 for book in books}

for user_dict in biglist:
    # 遍历每个用户的评分字典,用_代替不需要的user变量
    for _, ratings in user_dict.items():
        for book, score in ratings.items():
            if score != 0:
                total_non_zero[book] += score
                count_non_zero[book] += 1
                print(f"Found non-zero value, [{book} : {score}]")

# 计算每本书的平均值,处理无有效评分的情况
book_averages = {}
for book in books:
    if count_non_zero[book] > 0:
        book_averages[book] = round(total_non_zero[book] / count_non_zero[book], 2)  # 保留两位小数
    else:
        book_averages[book] = None  # 无有效评分时设为None,也可按需设为0

print("\n=== 统计结果 ===")
print("每本书非零评分总和:", total_non_zero)
print("每本书非零评分数量:", count_non_zero)
print("每本书非零评分平均值:", book_averages)

修正说明

  1. 用total_non_zero和count_non_zero两个字典,分别对应每本书的非零评分总和、有效评分次数,确保每本书的数据独立统计
  2. 去掉了多余的books循环,直接针对当前遍历到的book进行判断和更新
  3. 计算平均值时加入了除数为0的判断,避免报错,同时可以按需处理无有效评分的情况(比如设为None或0)
  4. 用_代替了不需要的user变量,让代码更简洁

运行这段代码后,你就能得到每本书正确的非零评分总和、数量以及平均值啦~

内容的提问来源于stack exchange,提问作者Jana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:22:37