Python:是否可以使用reduce()进行相同的操作?

时间:2020-02-26 15:56:53

标签: python-3.x dictionary reduce

这是化验的一部分,因此需要使用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表达式来实现上述内容?也许在过滤器中?

1 个答案:

答案 0 :(得分:1)

绝对有可能。

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

如果另一个机场字典中存在键,则将[键,每个dict值之和,takeOff值,着陆值]组成的元素添加到数组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]]
相关问题