我在python 3中有如下字典:
ss = {'a':'2', 'b','3'}
我想使用map
函数将所有值转换为int,我写了这样的内容:
list(map(lambda key,val: int(val), ss.items())))
但是python抱怨道:
TypeError :()缺少1个必需的位置参数:' val'
我的问题是如何用两个输入(例如key和val)编写lambda
函数
答案 0 :(得分:24)
ss.items()
将给出一个iterable,它会在每次迭代时给出元组。在lambda
函数中,您已将其定义为接受两个参数,但元组将被视为单个参数。因此没有值传递给第二个参数。
您可以像这样修复
print(list(map(lambda args: int(args[1]), ss.items())))
# [3, 2]
如果您无视这些键,只需使用ss.values()
这样的
print(list(map(int, ss.values())))
# [3, 2]
否则,as suggested by Ashwini Chaudhary,使用itertools.starmap
,
from itertools import starmap
print(list(starmap(lambda key, value: int(value), ss.items())))
# [3, 2]
我更喜欢List comprehension方式
print([int(value) for value in ss.values()])
# [3, 2]
在Python 2.x中,你可以这样做
print map(lambda (key, value): int(value), ss.items())
此功能称为元组参数解包。但是这在Python 3.x中被删除了。在PEP-3113
中详细了解相关信息