python - 根据排名对字典项目求和

标签 python dictionary collections counter

我可以对每个键的字典列表中的项目进行求和,如下所示:

import functools
dict(
    functools.reduce(
        lambda x, y:x.update(y) or x,
        dict1,
        collections.Counter())
)

但考虑到

dict1 = [{'ledecky': 1, 'king': 2, 'vollmer': 3},
         {'ledecky': 1, 'vollmer': 2, 'king': 3},
         {'schmitt': 1, 'ledecky': 2, 'vollmer': 3}]

鉴于以下情况,我如何根据奖牌值(value)求和它们的值:

medal_value = {1: 10.0, 2: 5.0, 3: 3.0}

最终的字典会产生:

{'ledecky': 25.0, 'king': 8.0, 'vollmer': 11.0, 'schmitt': 10.0}

最佳答案

在本例中,get() 字典函数运行得非常好,我们可以为新创建的字典指定默认值 0,或者将其当前值与加权值相加。使用我们的value(dict1的值)作为搜索键。

def calculate_points(results, medal_value):
    d = {}
    for item in results:
        for key, value in item.iteritems():
            d[key] = d.get(key, 0) + medal_value[value]
    return d

示例输出:

dict1 = [{'ledecky': 1, 'king': 2, 'vollmer': 3},
     {'ledecky': 1, 'vollmer': 2, 'king': 3},
     {'schmitt': 1, 'ledecky': 2, 'vollmer': 3}]

medal_value = {1 : 10.0, 2 : 5.0, 3 : 3.0}

print calculate_points(dict1, medal_value)
>>> {'ledecky': 25.0, 'king': 8.0, 'schmitt': 10.0, 'vollmer': 11.0}

关于python - 根据排名对字典项目求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38862949/

相关文章:

python - 更改 databricks 笔记本的默认语言

python - 无法让 django dashing 示例工作

python - PyGObject GTK+ 3 - 文档?

c# - 具有变化属性的对象的可观察列表

.net - 在哪里可以了解各种类型的 .NET 列表?

Python 3.4.3 tkinter - 程序在声明 IntVar 或任何其他 tkinter 数据类型时卡住

python - 提取字典列表中特定键的所有值 - 使用机器人框架

python - 查找某个键的最大值

Python:如何从字典中打印某些值

java - 使用 Jackson 将列表序列化为 xml,无需注释?