我有此字典列表,这些字典已经根据第一个值进行排序。如何继续根据列表的第二个值对列表进行排序?
这是我的词典列表:
[{'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突发。
答案 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
的类型转换值。