如何将元组列表传递给lamda函数

2024-04-24 15:34:29 发布

您现在位置:Python中文网/ 问答频道 /正文

当在for循环中使用元组列表时,它与两个单独的变量完美地结合在一起,如下所示

t_dict = {
    "k1": "v1",
    "k2": "v2",
    "k3": "v3",
    "k4": "v4",
    "k5": "v5"
}

for k, v in t_dict.items():
    print "%s=%s" % (k, v)

但当用map函数转换为lambda时,得到如下错误

print map(lambda k, v: "%s=%s" % (k, v), t_dict.items())

Traceback (most recent call last):   File "test.py", line 14, in <module>
    print map(lambda k, v: "%s=%s" % (k, v), t_dict.items()) TypeError: <lambda>() takes exactly 2 arguments (1 given)

在lambda函数中有没有其他方法可以调用元组列表?你知道吗


Tags: lambda函数inmap列表foritemsk2
3条回答

对于您的情况,还可以使用%后面的元组进行格式化,因此:

map(lambda t: "%s=%s" % t, t_dict.items())

内置map支持多个iTerable:

res = map(lambda k, v: "%s=%s" % (k, v), t_dict, t_dict.values())
# ['k1=v1', 'k2=v2', 'k3=v3', 'k4=v4', 'k5=v5']

^{}文档所述:

If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel.

如前所述,您可以将多个iterable传递给map,但是如果您想分别传递itemskeysvalues,您可以使用zip(*...)"transpose"项到两个列表,然后再次使用*将它们作为两个不同的参数传递给map

>>> list(map(lambda k, v: "%s=%s" % (k, v), *zip(*t_dict.items())))
['k1=v1', 'k2=v2', 'k3=v3', 'k4=v4', 'k5=v5']

或使用^{}

>>> from itertools import starmap
>>> list(starmap(lambda k, v: "%s=%s" % (k, v), t_dict.items()))
['k1=v1', 'k2=v2', 'k3=v3', 'k4=v4', 'k5=v5']

相关问题 更多 >