我试图使用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)])因此,代码中让我感到困惑的是已排序()函数中使用的Lambda函数。我知道't‘是参数,'t’或't1‘是表达式,但不知道如何在排序()中得到赋值。在代码中,'t = d.items()‘似乎是自动发生的?
请帮助我理解这里的机制,并提前感谢!
发布于 2018-09-27 16:19:49
首先,请注意,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 valuesKEY参数是在箭头行中使用的一个函数,用于比较两个值,以查看它们是否需要交换。
https://stackoverflow.com/questions/52541156
复制相似问题