我试图使用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()'是自动发生的吗?
请帮助我在这里了解机制,并在此先多谢!
答案 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
参数是一个函数,该函数在带有箭头的行中用于比较两个值以查看是否需要交换。