排序和比较#

  • maxmin

  • sorted

使用key参数#

假设我们有一个批量下载很多大小不一的文件的程序,我们希望在调试时把最大的一个或者多个文件取出尝试。我们可以使用max或者sorted的key参数帮助我们。

我们首先模拟一个文件信息列表。

import random

file_list = [{"file_name": f"name{i}", "file_size": random.randint(1, 1000000)}
for i in range(1000)]

我们尝试print前十个看看它长什么样子。

print(file_list[0:10])
[{'file_name': 'name0', 'file_size': 136989}, {'file_name': 'name1', 'file_size': 372028}, {'file_name': 'name2', 'file_size': 783956}, {'file_name': 'name3', 'file_size': 909572}, {'file_name': 'name4', 'file_size': 361201}, {'file_name': 'name5', 'file_size': 52671}, {'file_name': 'name6', 'file_size': 114373}, {'file_name': 'name7', 'file_size': 352645}, {'file_name': 'name8', 'file_size': 179748}, {'file_name': 'name9', 'file_size': 725917}]

我们希望拿出最大的一个来试试。

max(file_list, key=lambda item: item['file_size'])

特别注意,这里的key需要填一个函数,列表中的元素按照此函数的返回值比较大小。

我们如果希望拿最大的10个呢?

sorted(file_list, key=labmda item: item['file_size'], reverse=True)[0:10]

reverse参数控制降序或者升序。默认为False升序,即从小到大排;我们这里调整成True降序,即从大到小排。

练习题#

假设我们的数据变成了如下结构:

file_dict = {
    'name_1': {'file_size': 10},
    'name_2': {'file_size': 100},
    ...
}

如何获取最大的一个或者十个?

参考资料#