Python 中的 Lambda 函数使用字典

Lambda function in Python using dictionaries

我需要将两个函数转换为同一函数的 lambda 版本,我将 post 代码和我的尝试无效。这是在 Python 和映射对中使用字典,然后减少它们。对于实际的分配,我正在计算 odds/evens 并且这些被映射到 1 或 0 但这里我只是使用随机数。我相信没有错误这是最小的可复制代码。感谢您的帮助!

我尝试将一行更改为: mapping = lambda v,k: [(key,val) for key in evenOddDict.items()]

因为它不认识key/val。我不确定这里的字典是否需要做一些特殊的事情。

#mapping function without lambda
#def mapping(key,val):
#    reverse = (val,key)
#    return reverse

#mapping function with lambda
mapping = lambda v,k: [(key,val) for entry in dummydata.items()]

#mapReduce function without lambda
#def mapReduce(key,val):
#    if key not in final_output:
#        final_output[key] = []
#    final_output[key].append(val)

#mapReduce function with lambda
mapReduce = lambda k,v:final_output[k] + v

dummydata = {11:1, 36:0, 53:1, 77:0, 95:1, 22:0, 40:1, 63:0, 85:1, 17:0}

map_output = []
for k,v in dummydata.items():
    tmp = mapping(k,v)
    map_output.append(tmp)
    
for k, v in map_output:
    mapReduce(k,v)

print("\n\n====================================================")
print("       After mapReduce and Final Output")
print("====================================================\n\n")

for i in range (len(map_output)):
    print(map_output[i])

print("\n\n")

for key in final_output:
    print (key,final_output[key])

print("\n\n")

这些是没有 lambda 的两个函数的等效版本。

mapping = lambda k, v: (v, k)

mapReduce = lambda k, v: final_output.setdefault(k, []).append(v)

顺便提一下 , and, according to PEP 8:

The use of the assignment statement eliminates the sole benefit a lambda expression can offer over an explicit def statement (i.e. that it can be embedded inside a larger expression)

如果除了作业要求之外还有其他原因,那将很有趣,因为共识似乎是命名 lambda 与普通函数相比没有任何好处(以及一些缺点,例如用于调试的回溯)。