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

时间:2014-10-24 07:28:53

标签: python python-3.x dictionary syntax lambda

我在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函数

1 个答案:

答案 0 :(得分:24)

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

  1. 您可以像这样修复

    print(list(map(lambda args: int(args[1]), ss.items())))
    # [3, 2]
    
  2. 如果您无视这些键,只需使用ss.values()这样的

    print(list(map(int, ss.values())))
    # [3, 2]
    
  3. 否则,as suggested by Ashwini Chaudhary,使用itertools.starmap

    from itertools import starmap
    print(list(starmap(lambda key, value: int(value), ss.items())))
    # [3, 2]
    
  4. 我更喜欢List comprehension方式

    print([int(value) for value in ss.values()])
    # [3, 2]
    
  5. 在Python 2.x中,你可以这样做

    print map(lambda (key, value): int(value), ss.items())
    

    此功能称为元组参数解包。但是这在Python 3.x中被删除了。在PEP-3113

    中详细了解相关信息