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'
显然,它与列表中的键相同,但找不到键。
>>> 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}