如何根据另一个列表对列表进行排序?蟒蛇

时间:2015-04-26 10:41:20

标签: python list sorting python-3.3

所以如果我有一个清单:

name = ['Megan', 'Harriet', 'Henry', 'Beth', 'George']

我还有另一个列表,其中每个值代表正确顺序的名称

score_list = [9, 6, 5, 6, 10]

所以Megan = 9,Beth = 6(顺便说一下,这是来自字典)

我如何按字母顺序对名称进行排序,但保持score_list匹配名称? 我已经使用冒泡排序方法完成了排序数字,但没有使用字符串。

4 个答案:

答案 0 :(得分:2)

一个明显的方法是zip列表对其进行排序,然后将其解压缩

>>> name, score = zip(*sorted(zip(name, score_list)))
>>> name
('Beth', 'George', 'Harriet', 'Henry', 'Megan')
>>> score
(6, 10, 6, 5, 9)

答案 1 :(得分:2)

您可以使用zip在元组的同时对它们进行排序。排序将按名称进行:

tuples = sorted(zip(name, score_list))

然后

name, score_list = [t[0] for t in tuples], [t[1] for t in tuples]

答案 2 :(得分:1)

如果你有一个词典的正确方法是按键对项目进行排序:

name = ['Megan', 'Harriet', 'Henry', 'Beth', 'George']

score_list = [9, 6, 5, 6, 10]
d = dict(zip(name, score_list))

from operator import itemgetter
print(sorted(d.items(), key=itemgetter(0)))
[('Beth', 6), ('George', 10), ('Harriet', 6), ('Henry', 5), ('Megan', 9)]

答案 3 :(得分:0)

考虑使用第三方工具more_itertools.sort_together

给出

import more_itertools as mit


name = ["Megan", "Harriet", "Henry", "Beth", "George"]
score_list = [9, 6, 5, 6, 10]

代码

mit.sort_together([name, score_list])
# [('Beth', 'George', 'Harriet', 'Henry', 'Megan'), (6, 10, 6, 5, 9)]

通过> pip install more_itertools安装more_itertools