首页 > 解决方案 > 在嵌套字典中查找非零单个值的总和

问题描述

所以我写了这段代码,我试图找到每本书的每个非零评分的总和,以便找到每本书的评分平均值,而不包括每本书的零评分。

这是我试图做的,它正在工作。但是我不知道如何找到每本书的每个评分的总和并找到平均值。

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}] 

标签: python-3.x

解决方案


应该适用于您的数据结构的东西。收集所有评级,然后过滤各个列表。

big_dict = {}
for book in books:
    big_dict[book] = []

# collect all ratings
for d in biglist:
    for _, ratings in d.items():
        for book in books:
            big_dict[book].append(ratings.get(book))

for book, rating in big_dict.items():
    # compute averages of filtered list
    average_rating = np.mean([a for a in rating if a != 0])
    print(book, average_rating)

推荐阅读