无法访问字典中的键

问题描述 投票:0回答:1
books = ['book1', 'book2', 'book3']
names = ['anas', 'jana', 'mo']
biglist = [{'anas' : {'book1' : 0, 'book2' : -2, 'book3' : 3}}, 
            {'jana' : {'book1' : 5, 'book2' : 0, 'book3' : -3}}, 
            {'mo' : {'book1' : 1, 'book2' : 5, 'book3' : 3}}]

我打算计算每本书的平均值(不包括零),所以我想出了这个清单理解:

ratings={book:[biglist[i][names[j]][book] for i, _ in enumerate(biglist)] for book in books for j in range(len(names))}
sum_of_ratings = {book:sum(ratings[book]) for book in books}
avg_of_ratings =  {book:sum_of_ratings[book]/len(ratings[book]) for book in books}

但是当我运行代码时,它将给出以下输出:

ratings={book:[biglist[i][names[j]][book] for i, _ in enumerate(biglist)] for book in books for j in range(len(names))}
KeyError: 'anas'

显然,它与列表中的键相同,但找不到键。

python python-3.x keyerror
1个回答
0
投票
>>> ratings = {book: [d[book] for u in biglist for d in u.values()] for book in books}
>>> ratings
{'book1': [0, 5, 1], 'book2': [-2, 0, 5], 'book3': [3, -3, 3]}
>>> from statistics import mean
>>> avg_ratings = {book: mean(r for r in ratings[book] if r != 0) for book in books}
>>> avg_ratings
{'book1': 3, 'book2': 1.5, 'book3': 1}
© www.soinside.com 2019 - 2024. All rights reserved.