here is the solution
names = ['Xander', 'Spec', 'Meng', 'Sparc', 'Jones', 'Nick', 'Link']
scores = [120, 450, 300, 200, 66, 183, 80]
data = list(zip(names, scores))
print(data)
# output [('Xander', 120), ('Spec', 450), ('Meng', 300), ('Sparc', 200), ('Jones', 66), ('Nick', 183), ('Link', 80)]
data.sort(key=lambda x:x[1], reverse=True)
print(data)
# output [('Spec', 450), ('Meng', 300), ('Sparc', 200), ('Nick', 183), ('Xander', 120), ('Link', 80), ('Jones', 66)]
for name, score in data:
print(name,score,sep='\t')
""" output
Spec 450
Meng 300
Sparc 200
Nick 183
Xander 120
Link 80
Jones 66
"""
as changes suggested, this can be done in a more elegant way like this.
names = ['Xander', 'Spec', 'Meng', 'Sparc', 'Jones', 'Nick', 'Link']
scores = [120, 450, 300, 200, 66, 183, 80]
data = list(zip(scores, names))
print(data)
# output [(120, 'Xander'), (450, 'Spec'), (300, 'Meng'), (200, 'Sparc'), (66, 'Jones'), (183, 'Nick'), (80, 'Link')]
data.sort(reverse=True)
print(data)
# output [(450, 'Spec'), (300, 'Meng'), (200, 'Sparc'), (183, 'Nick'), (120, 'Xander'), (80, 'Link'), (66, 'Jones')]
for score, name in data:
print(name,score,sep='\t')
""" output
Spec 450
Meng 300
Sparc 200
Nick 183
Xander 120
Link 80
Jones 66
"""
using itemgetter as suggested by @Jab
names = ['Xander', 'Spec', 'Meng', 'Sparc', 'Jones', 'Nick', 'Link']
scores = [120, 450, 300, 200, 66, 183, 80]
data = list(zip(names, scores))
print(data)
# output [('Xander', 120), ('Spec', 450), ('Meng', 300), ('Sparc', 200), ('Jones', 66), ('Nick', 183), ('Link', 80)]
from operator import itemgetter
data.sort(key=itemgetter(1), reverse=True)
print(data)
# output [('Spec', 450), ('Meng', 300), ('Sparc', 200), ('Nick', 183), ('Xander', 120), ('Link', 80), ('Jones', 66)]
for name, score in data:
print(name,score,sep='\t')
""" output
Spec 450
Meng 300
Sparc 200
Nick 183
Xander 120
Link 80
Jones 66
"""