So if I have one list:
name = [\'Megan\', \'Harriet\', \'Henry\', \'Beth\', \'George\']
And I have another list where each value represents the
You can sort them at the same time as tuples by using zip
. The sorting will be by name:
tuples = sorted(zip(name, score_list))
And then
name, score_list = [t[0] for t in tuples], [t[1] for t in tuples]
One obvious approach would be to zip
both the list sort it and then unzip it
>>> name, score = zip(*sorted(zip(name, score_list)))
>>> name
('Beth', 'George', 'Harriet', 'Henry', 'Megan')
>>> score
(6, 10, 6, 5, 9)
Consider a third-party tool more_itertools.sort_together:
Given
import more_itertools as mit
name = ["Megan", "Harriet", "Henry", "Beth", "George"]
score_list = [9, 6, 5, 6, 10]
Code
mit.sort_together([name, score_list])
# [('Beth', 'George', 'Harriet', 'Henry', 'Megan'), (6, 10, 6, 5, 9)]
Install more_itertools via > pip install more_itertools
.
The correct way if you have a dict is to sort the items by the key:
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)]