簡體   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