繁体   English   中英

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

[英]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)]

安装more_itertools> pip install more_itertools

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM