如何根据另一个列表对列表进行排序? Python
How to sort a list according to another list? Python
所以如果我有一个列表:
name = ['Megan', 'Harriet', 'Henry', 'Beth', 'George']
我还有另一个列表,其中每个值代表正确顺序的名称
score_list = [9, 6, 5, 6, 10]
所以 Megan = 9 和 Beth = 6(顺便说一句,这是来自字典)
我如何按字母顺序对姓名进行排序但保留 score_list 匹配的姓名?
我已经使用冒泡排序方法而不是字符串对数字进行了排序。
一个明显的方法是zip
列表排序然后解压缩
>>> name, score = zip(*sorted(zip(name, score_list)))
>>> name
('Beth', 'George', 'Harriet', 'Henry', 'Megan')
>>> score
(6, 10, 6, 5, 9)
您可以使用 zip
将它们与元组同时排序。将按名称排序:
tuples = sorted(zip(name, score_list))
然后
name, score_list = [t[0] for t in tuples], [t[1] for t in tuples]
如果你有字典,正确的方法是按键排序:
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)]
考虑第三方工具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
。
所以如果我有一个列表:
name = ['Megan', 'Harriet', 'Henry', 'Beth', 'George']
我还有另一个列表,其中每个值代表正确顺序的名称
score_list = [9, 6, 5, 6, 10]
所以 Megan = 9 和 Beth = 6(顺便说一句,这是来自字典)
我如何按字母顺序对姓名进行排序但保留 score_list 匹配的姓名? 我已经使用冒泡排序方法而不是字符串对数字进行了排序。
一个明显的方法是zip
列表排序然后解压缩
>>> name, score = zip(*sorted(zip(name, score_list)))
>>> name
('Beth', 'George', 'Harriet', 'Henry', 'Megan')
>>> score
(6, 10, 6, 5, 9)
您可以使用 zip
将它们与元组同时排序。将按名称排序:
tuples = sorted(zip(name, score_list))
然后
name, score_list = [t[0] for t in tuples], [t[1] for t in tuples]
如果你有字典,正确的方法是按键排序:
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)]
考虑第三方工具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
。