【问题标题】:Python: Is it possible to do the same using reduce()?Python:是否可以使用 reduce() 来做同样的事情?
【发布时间】:2020-06-10 13:21:45
【问题描述】:

这是一个assaigment的一部分,所以它需要使用reduce函数(或过滤器,虽然我没有看到它),因此我想知道它是否可能。

我有两个字典:

takeOff_Airport = {'LPPD': 4, 'DAAS': 1, 'EDDH': 16, 'LFLL': 17, 'LFPO': 30}
landing_Airport = {'LFPO': 12, 'LPPD': 7, 'UUEE': 11, 'DAAS': 7, 'LFSL': 1}

应用以下代码后:

airports = (sorted([[k, [v1+landing_Airport[k], v1,landing_Airport[k]]] for k,
                    v1 in takeOff_Airport.items() if k in landing_Airport], 
                    key=lambda kv:kv[1], reverse=True))

我得到了预期的结果:

airports: [['LFPO', 42, 30, 12], ['LPPD', 11, 4, 7], ['DAAS', 8, 1, 7]]

“机场”打印的是一个列表,其中包含两个字典(着陆和起飞)中的常用机场名称,并将每个字典值的总和以及每个字典 [key:value] 相加。

是否可以在 reduce 函数中使用一些 lambda 表达式来实现上述功能?也许在过滤器中?

【问题讨论】:

    标签: python-3.x dictionary reduce


    【解决方案1】:

    这绝对是可能的。

    lambda 将数组x 作为参数,该数组将结果和key 聚合到机场字典之一(在我的示例中为takeOff_Airport)。

    如果key存在于其他机场字典中,则将[key,每个dict值之和,起飞值,着陆值]组成的元素添加到数组x中。否则,数组x 保持不变。

    将 lambda 传递给 reduce 函数,将 x 的初始值设置为空数组,它将生成所需的结果。

    airports = reduce(lambda x, key : x + [[key, takeOff_Airport[key] + landing_Airport[key], takeOff_Airport[key], landing_Airport[key]]] if key in landing_Airport else x, takeOff_Airport, [])
    

    结果:

    >>> airports
    [['LPPD', 11, 4, 7], ['DAAS', 8, 1, 7], ['LFPO', 42, 30, 12]]
    

    【讨论】:

    • 正确!!!在通过 takeOff_Airport 之后,我不理解末尾的括号。谢谢@M.F
    • 最后的括号传递了 airports 数组的初始值,这是一个空数组 [],我们将为每个机场添加结果。
    猜你喜欢
    • 2020-08-05
    • 2021-03-02
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多