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

时间:2019-07-22 19:37:36

标签: python python-3.x dictionary

我有此词典列表:

-p

我必须为其中的每只猫创建分钟的观看报告。如果已完全监视,则添加所有分钟;如果部分监视,则仅添加一半的分钟;如果未监视,则不添加分钟。

因此,示例输出报告为:

mysqldump [options] -p'' --databases database_name

我快到了,至少我是这么认为的。这是我的输出:

import os
from mlflow import log_metric, log_param, log_artifact

if __name__ == "__main__":
    # Log a parameter (key-value pair)
    log_param("param1", 5)

    # Log a metric; metrics can be updated throughout the run
    log_metric("foo", 1)
    log_metric("foo", 2)
    log_metric("foo", 3)

    # Log an artifact (output file)
    with open("output.txt", "w") as f:
        f.write("Hello world!")
    log_artifact("output.txt")

似乎只在“部分”中添加了“浪漫”,并且总数未更新。

任何在正确方向上的帮助都是很好的。

这是我的代码:

[{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 ,我认为有些问题。也许只是遍历所有键而没有得到我想要的键。

2 个答案:

答案 0 :(得分:2)

一个可能的版本,使用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}

答案 1 :(得分:1)

尝试一下!

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)