我有这个字典列表:
[{Title: title1, Minutes: 657, Cat: Romance, Watched: Fully},
{Title: title2, Minutes: 128, Cat: Philosophy, Watched: Fully},
{Title: title3, Minutes: 76, Cat: Romance, Watched: Partially}]
我必须为其中的每只猫创建观看分钟数的报告。如果它是完全
观看的,那么所有的分钟都会被添加,如果它被部分观看,那么只有一半的分钟被添加,如果它没有被观看,那么没有分钟被添加。因此,示例输出报告将是:
Romance: 695
Philosophy: 128
我快到了,至少我是这么认为的。这是我的输出:
{'Romance': 38, 'Philosophy':128}
它似乎只添加了部分浪漫,总数没有更新。
任何正确方向的帮助都会很棒。
这是我的代码:
def get_count(self, movie_list):
final = {}
for movie in self.movie_list:
get_category = movie['Cat']
minutes = int(movie['Minutes'])
total = 0
for key in movie:
if movie[key] == get_category:
if movie['Watched'] == 'Fully':
total += minutes
elif book['Watched'] == 'Partially':
half_of_movie = minutes//2
total += half_of_movie
elif book['Watched'] == 'Unwatched':
total += 0
final[get_category] = total
print(final)
编辑:经过进一步审查,我认为正在发生的事情是我正在重写总数。
在这一行中:for key in movie:
我相信有些不对劲。也许它只是循环访问所有密钥,而没有得到我想要的密钥。
一个可能的版本,使用dict.setdefault()
(doc):
data = [{'Title': 'title1', 'Minutes': 657, 'Cat': 'Romance', 'Watched': 'Fully'},
{'Title': 'title2', 'Minutes': 128, 'Cat': 'Philosophy', 'Watched': 'Fully'},
{'Title': 'title3', 'Minutes': 76, 'Cat': 'Romance', 'Watched': 'Partially'}]
out = {}
for item in data:
out.setdefault(item['Cat'], 0)
out[item['Cat']] += item['Minutes'] if item['Watched'] == 'Fully' else item['Minutes'] // 2
print(out)
指纹:
{'Romance': 695, 'Philosophy': 128}
试试这个!
def get_count(self, movie_list):
final = {}
for movie in self.movie_list:
cat = movie['Cat']
final.setdefault(cat, 0)
minutes = int(movie['Minutes'])
if movie['Watched'] == 'Fully':
final[cat] += minutes
elif movie['Watched'] == 'Partially':
final[cat] += minutes // 2
print(final)