![](/img/trans.png)
[英]Python: Lambda Function to Return Values Based on Multiple Conditions
[英]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.