繁体   English   中英

如何基于Python lambda函数中的条件分配多个return语句

[英]How to assign Multiple return statements based on conditions in Python lambda function

我有这样的数据,我想添加用逗号分隔的String并求和int值。

data=[{"string": "x","int": 1},
      {"string": "y","int": 2},
      {"string": "z","int": 3}]

我期待这样的输出。

输出:

{ "string":"x,y,z","int":"6"}

我尝试使用reduce函数

func = lambda x, y: dict((m, n + y[m]) for m, n in x.items() )
print reduce(func, data)

我得到这样的东西。

{"string": "xyz", "int": "6"}

如何用逗号分隔字符串。

func = lambda x, y: dict((m, n + y[m]) for m, n in x.items() )

您需要一个自定义函数来替换n+y[m] (例如custom_add(a,b) ),其中,

  • 如果参数是整数以返回它们的代数和
  • 如果参数是字符串,则将其与“,”连接并返回最终字符串

让我们实现它。

def custom_join(a,b):
    arr = list((a,b))
    return sum(arr) if is_int_array(arr) else ','.join(arr)

我们还没有is_int_array/1 让我们现在就开始做吧。

def is_int_array(arr):
    return all(i for i in map(is_int, arr))

is_int/1 我们开始做吧

def is_int(e):
    return isinstance(e, int)

对字符串做同样的事情

def is_str(e):
    return isinstance(e, str)

def is_str_array(arr):
    return all(i for i in map(is_str, arr))

总结所有-https: //repl.it/LPRR

好的,这很疯狂,但是当您尝试实现functional-only方法时,您需要准备好这种情况-)))

您可以将str.join()sum()与一些生成器表达式结合使用,如下所示:

res = {"string": ','.join(d['string'] for d in data), "int": sum(d['int'] for d in data)}

输出:

>>> res
{'int': 6, 'string': 'x,y,z'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM