python:将变量传递给映射函数

时间:2017-04-20 17:27:37

标签: python python-3.x

我使用名为filter_json的函数将一个数组映射到另一个数组:

filtered_json = map(filter_json, data_json)

def filter_json(data_json):
    """Filter data_json to data that is needed"""
    ...
    # return mapped dictionary

现在我希望filter_json函数接受另一个参数。像这样的东西(但这显然不起作用):

filtered_json = map(filter_json, data_json, var)

def filter_json(data_json, var):
    """Filter data_json to data that is needed"""
    ... # do something with var
    # return mapped dictionary

如何将更多变量传入filter_json

2 个答案:

答案 0 :(得分:3)

两种可能的方法:

  1. 使用functools.partial

    import functools
    f = functools.partial(filter_json, var=var)
    filtered_json = map(f, data_json)
    
  2. ...或使用列表理解而不是map

    filtered_json = [ filter_json(x, var) for x in data_json ]
    

    如果你想要一个懒惰评估的迭代器而不是list,使用圆括号而不是方括号 - 那么它被称为生成器表达式而不是列表推导。

  3. 我通常更喜欢选项2,基于可读性,以及在迭代中包含if条件和嵌套循环的灵活性。

答案 1 :(得分:2)

您可以使用lambda来调用具有您想要的变量的函数

filtered_json = map(lambda data: filter_json(data, var), data_json)

def filter_json(data_json, var):
    """Filter data_json to data that is needed"""
    ... # do something with var
    # return mapped dictionary