如何对具有相同键值对的字典列表求和?



我有这个字典列表:

[{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)

最新更新