python中的lambda可以迭代dict吗?

2024-03-29 02:34:47 发布

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

我最近有个面试。面试官问我如何在python中重复dict。我说所有的方法都是用来表示。但他告诉我,兰姆达怎么样?

我感到非常困惑,我认为lambda是一个匿名函数,但它如何迭代dict?一些代码如下:

new_dict = sorted(old_dict.items(), lambda x: x[1]) # sorted by value in dict

但在这段代码中,lambda被用作提供比较键的函数。你觉得这个问题怎么样?


Tags: 方法lambda函数代码innewbyvalue
3条回答

使用普通的lambda来迭代Python中的任何内容听起来都非常错误。当然,迭代序列和集合的最python方法是使用列表理解和生成表达式,比如@Andrey presented。

如果面试官依赖于更具理论性/计算机科学性的答案,那么值得注意的是,使用lambdas迭代是非常有可能的,尽管我必须强调,这不是python,也不适用于学术练习以外的任何环境:

# the legendary Y combinator makes it possible
# to let nameless functions recurse using an indirection
Y = lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args)))
# our iterator lambda
it = lambda f: lambda Lst: (Lst[0], f(Lst[1:])) if Lst else None
# see it in action:
Y(it)([1,2,3])
=> (1, (2, (3, None)))

您可以使用lambda循环dict,如下所示:

d = {'a': 1, 'b': 2}
values = map(lambda key: d[key], d.keys())

你不能用lambda迭代。在Python中迭代iterable对象的方法如下:

  1. for语句(您的答案)
  2. 理解,包括列表[x for x in y]、字典{key: value for key, value in x}和集合{x for x in y}
  3. 生成器表达式:(x for x in y)
  4. 传递给将迭代它的函数(mapallitertools模块)
  5. 手动调用next函数,直到发生StopIteration

注意:3不会迭代它,除非您稍后在生成器上迭代。如果是4,则取决于函数。

对于像dict或list这样的迭代特定集合,可以有更多的技术,比如while col: remove element或使用索引切片技巧。

现在lambda进入画面。您可以在其中一些函数中使用lambdas,例如:map(lambda x: x*2, [1, 2, 3])。但这里的lambda与迭代过程本身无关,您可以传递一个正则函数map(func, [1, 2, 3])

相关问题 更多 >