Python 按字母顺序对压缩列表进行排序,并根据另一个列表对第二个列表进行排序**双重排序**

Python 按字母顺序对压缩列表进行排序,并根据另一个列表对第二个列表进行排序**双重排序**,python,python-3.x,list,sorting,Python,Python 3.x,List,Sorting,所以我有这三张清单 last_names= ["B","A","A","A","B","G","G"] courses = [ 'Comp','Chem','Phys', 'Comp', 'Chem', 'Phys', 'Chem'] grades = [3,2,3,3,2,1,3] 因此,“姓氏”应按字母顺序排序,然后“课程”应根据以下列表排序: ['Math','Chem','Comp','Phys'] 所有这一切都应该发生,而三个列表中的元素应该以相同的方式重新排序,这样我们就

所以我有这三张清单

 last_names= ["B","A","A","A","B","G","G"]
 courses = [ 'Comp','Chem','Phys', 'Comp', 'Chem', 'Phys', 'Chem']
 grades = [3,2,3,3,2,1,3]
因此,“姓氏”应按字母顺序排序,然后“课程”应根据以下列表排序:

 ['Math','Chem','Comp','Phys']
所有这一切都应该发生,而三个列表中的元素应该以相同的方式重新排序,这样我们就可以保持三个元素彼此连接

所以结果应该是这样的:

 last_names= ["A","A","A","B","B","G","G"]
 courses = [ 'Chem','Comp','Phys', 'Chem', 'Comp', 'Chem', 'Phys']
 grades = [2,3,3,2,3,3,1]

我试着编一本字典并在里面对它们进行排序,但它变得复杂了,我想不出一个方法来做这件事

你可以把三胞胎压缩,按姓氏和课程对它们进行排序,然后把元素取回。
我正在使用字典将课程与索引关联起来,这样我们就可以在固定时间内查找索引,而不是使用
courses\u order.index()


您可以压缩三元组,按姓氏和课程对它们进行排序,然后将元素取回。
我正在使用字典将课程与索引关联起来,这样我们就可以在固定时间内查找索引,而不是使用
courses\u order.index()


您可以使用zip和enumerate进行类似的操作

courses_sort = ['Math','Chem','Comp','Phys']
for i, v in enumerate(sorted(zip(last_names, courses, grades), key=lambda x: x[0]+ str(courses_sort.index(x[1])))):
    last_names[i], courses[i], grades[i] = v[0], v[1], v[2]
此代码将从三个列表中提取同一索引中的值,然后按姓氏列表对它们进行排序。
输出


您可以使用zip和enumerate进行类似的操作

courses_sort = ['Math','Chem','Comp','Phys']
for i, v in enumerate(sorted(zip(last_names, courses, grades), key=lambda x: x[0]+ str(courses_sort.index(x[1])))):
    last_names[i], courses[i], grades[i] = v[0], v[1], v[2]
此代码将从三个列表中提取同一索引中的值,然后按姓氏列表对它们进行排序。
输出


您可以使用和的组合来获得输出

last_names,courses,grades = [list(tup) for tup in zip(*sorted(zip(last_names,courses,grades)))]

您可以使用和的组合来获得输出

last_names,courses,grades = [list(tup) for tup in zip(*sorted(zip(last_names,courses,grades)))]
你试过裸体还是熊猫? 如果使用numpy,请如下所示:

import numpy as np
data = np.sort(np.array([last_names,courses,grades]))
import pandas as pd
data = pd.DataFrame({'lastnames':last_names,'courses':courses,'grades':grades})
data.sort_values(by=['lastnames'],inplace=True)
或者使用熊猫看起来像:

import numpy as np
data = np.sort(np.array([last_names,courses,grades]))
import pandas as pd
data = pd.DataFrame({'lastnames':last_names,'courses':courses,'grades':grades})
data.sort_values(by=['lastnames'],inplace=True)
如果您使用xlsx或csv文件,最好使用pandas

试试numpy或pandas? 如果使用numpy,请如下所示:

import numpy as np
data = np.sort(np.array([last_names,courses,grades]))
import pandas as pd
data = pd.DataFrame({'lastnames':last_names,'courses':courses,'grades':grades})
data.sort_values(by=['lastnames'],inplace=True)
或者使用熊猫看起来像:

import numpy as np
data = np.sort(np.array([last_names,courses,grades]))
import pandas as pd
data = pd.DataFrame({'lastnames':last_names,'courses':courses,'grades':grades})
data.sort_values(by=['lastnames'],inplace=True)

如果您使用xlsx或csv文件,最好使用pandas

谢谢!我已经这样做了,但问题是在第二步中,我必须根据我上面提到的具体列表来选择课程,所以基本上是双重排序谢谢!我已经这样做了,但问题是在第二步,我必须根据我上面提到的具体列表来学习课程,所以基本上是双重排序