python 3 map/lambda方法,带2个输入

Moh*_*eza 15 python syntax lambda dictionary python-3.x

我在python 3中有如下字典:

ss = {'a':'2', 'b','3'}
Run Code Online (Sandbox Code Playgroud)

我想用map函数将所有值转换为int ,我写了这样的东西:

list(map(lambda key,val: int(val), ss.items())))
Run Code Online (Sandbox Code Playgroud)

但是python抱怨道:

TypeError :()缺少1个必需的位置参数:'val'

我的问题是如何lambda用两个输入编写一个函数(例如key和val)

the*_*eye 26

ss.items()将给出一个迭代,它在每次迭代时都会给出元组.在您的lambda函数中,您已将其定义为接受两个参数,但元组将被视为单个参数.因此没有值传递给第二个参数.

  1. 你可以像这样解决它

    print(list(map(lambda args: int(args[1]), ss.items())))
    # [3, 2]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果你无论如何都忽略了键,只需使用ss.values()这样的方法

    print(list(map(int, ss.values())))
    # [3, 2]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 否则,正如Ashwini Chaudhary所建议的,使用itertools.starmap,

    from itertools import starmap
    print(list(starmap(lambda key, value: int(value), ss.items())))
    # [3, 2]
    
    Run Code Online (Sandbox Code Playgroud)
  4. 我更喜欢List理解方式

    print([int(value) for value in ss.values()])
    # [3, 2]
    
    Run Code Online (Sandbox Code Playgroud)

在Python 2.x中,你可以这样做

print map(lambda (key, value): int(value), ss.items())
Run Code Online (Sandbox Code Playgroud)

此功能称为元组参数解包.但是这在Python 3.x中被删除了.在PEP-3113中了解更多相关信息