Skip to main content
 首页 » 编程设计

Python:根据一个列表的索引对字典列表进行排序

2025年05月04日23dudu

所以我的口述如下:

dict1 = {1: [-1, 1, 2, 4, 3], 2: [11, 10, 9, 8, 7]} 

如何根据对其中一个列表进行排序的索引对 dict1 中的列表进行排序。比如list的排序索引

[11, 10, 9, 8, 7] 

这是

[4, 3, 2, 1, 0] 

所以新的 dict1 将是:

dict1 = {1: [3, 4, 2, 1, -1], 2: [7, 8, 9, 10, 11]} 

我试过这样的代码:

sorted(dict1.items(), key=lambda t: t[1]) 

还是想不通?我可以使用 for 循环来完成这项工作,但我相信存在更 pythonic 的方式。有什么想法吗?

请您参考如下方法:

一种方法是计算索引列表并将其应用于所有列表:

>>> dict1 = {1: [-1, 1, 2, 4, 3], 2: [11, 10, 9, 8, 7]} 
>>> basis = dict1[2] 
>>> indexes = sorted(range(len(basis)), key=basis.__getitem__) 
>>> for lst in dict1.values(): 
        lst[:] = [lst[i] for i in indexes] 
 
>>> dict1 
{1: [3, 4, 2, 1, -1], 2: [7, 8, 9, 10, 11]} 

如果您同意“第一个”列表确定顺序(您只说“基于 [...] 其中一个列表”),您还可以构建列并排序那些:

>>> dict1 = {1: [-1, 1, 2, 4, 3], 2: [11, 10, 9, 8, 7]} 
>>> dict(zip(dict1.keys(), zip(*sorted(zip(*dict1.values()))))) 
{1: (-1, 1, 2, 3, 4), 2: (11, 10, 9, 7, 8)}