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 与普通函数相比没有任何好处(以及一些缺点,例如用于调试的回溯)。
我需要将两个函数转换为同一函数的 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)
顺便提一下
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 与普通函数相比没有任何好处(以及一些缺点,例如用于调试的回溯)。