如何根据字典的第一和第二值对字典进行排序?

时间:2018-10-31 17:10:56

标签: python python-3.x dictionary

我有此字典列表,这些字典已经根据第一个值进行排序。如何继续根据列表的第二个值对列表进行排序?

这是我的词典列表:

[{'P3': [7, 117]}, {'P8': [14, 88]}, {'P2': [19, 102]}, {'P4': [19, 95]}]

所需结果:

[{'P3': [7, 117]}, {'P8': [14, 88]}, {'P4': [19, 95]}, {'P2': [19, 102]}]

我正在用Python完成“最短作业优先”调度任务。每个键(进程)的第一个值是cpu突发,第二个值是到达时间,因此我将需要P4在P2之前,因为它的到达时间首先到达并且它们具有相同的cpu突发。

1 个答案:

答案 0 :(得分:0)

对于初学者来说,如果您只想用列表值对字典列表进行排序,则可以使用以下一行python代码:

d = [{'P3': [7, 117]}, {'P8': [14, 88]}, {'P2': [19, 102]}, {'P4': [19, 95]}]  # assign the dictionary value
sort_by_first = sorted(d, key=lambda x: list(x.values()))

输出:

[{'P3': [7, 117]}, {'P8': [14, 88]}, {'P4': [19, 95]}, {'P2': [19, 102]}]
python中的

sorted()函数接受可选的关键字参数key,您可以在其中传递自定义函数以查找键,而我刚刚制作了一个lambda函数,它将对字典d的列表进行排序按其值列表list(x.values())

在python列表中的比较结果如下:

In [1]: [19, 95] < [19, 102]
Out[1]: True

In [2]: [19, 95] < [19, 95]
Out[2]: False

In [3]: [19, 95] < [19, 5]
Out[3]: False

更新:

lambda函数可以替换为lambda x: next(iter(x.values())),其中根据this的答案提取dict_values的类型转换值。