基于ran的字典项求和

2024-09-29 23:19:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以对每个键的dict列表中的项求和,如下所示:

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}]

我怎么能根据奖牌的价值来计算他们的价值呢

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

这样最终的dict将产生:

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

Tags: orlambdaimportreduce列表updatecollectionsdict
2条回答

get()字典函数在本例中运行得非常好,我们要么给新创建的字典一个默认值0,要么用我们的valuedict1)作为搜索键,将它的当前值与加权值相加。你知道吗

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}

只需定义一个查找函数即可将原始dict转换为dict:

def lookup(d):
    return dict((k, medal_value[v]) for k, v in d.items())

并将此函数应用于表达式的更新部分:

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

相关问题 更多 >

    热门问题