Python:了解在Sorted()中使用的Lambda

时间:2018-09-27 16:12:29

标签: python lambda

我试图使用orderedDict模块对字典进行排序,但是在查看下面的示例代码时想到了这个问题:

# regular unsorted dictionary
d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}

# dictionary sorted by key
OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

# dictionary sorted by value
OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

所以让我感到困惑的是在sorted()函数中使用的Lambda函数。我知道't'是参数,'t [0]'或't [1]'是表达式,但无法弄清楚't'如何在sorted()中获得赋值。在代码中,似乎't = d.items()'是自动发生的吗?

请帮助我在这里了解机制,并在此先多谢!

1 个答案:

答案 0 :(得分:1)

首先,请注意,lambda是定义常规函数的便捷方式,就像其他函数一样。这段代码:

sorted(d.items(), key=lambda t: t[0])

在功能上等效于此:

def get_first(t):
    return t[0]

sorted(d.items(), key=get_first)

您正在将一个函数传递给sorted(不是调用它的结果)。 sorted接受该函数并在需要时将值传递给它。

例如,sorted可以这样简单地定义:

def sorted(original_values, KEY):
    values = list(original_values)  # create a copy
    n = len(values)
    for j in range(n):
        for k in range(n - 1):
            if KEY(values[k]) > KEY(values[k + 1]):  # <----------
                values[k], values[k + 1] = values[k + 1], values[k]
    return values

KEY参数是一个函数,该函数在带有箭头的行中用于比较两个值以查看是否需要交换。