问题
Basically I have a nested list that I am trying to sort through the 1'st index I copied the way that the python howto says how to do it but it doesn't seem to work and I don't understand why:
code from the website:
>>> student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
>>> sorted(student_tuples, key=lambda student: student[2]) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
My code:
def print_scores(self):
try:
#opening txt and reading data then breaking data into list separated by "-"
f = open(appdata + "scores.txt", "r")
fo = f.read()
f.close()
userlist = fo.split('\n')
sheet_list = []
for user in userlist:
sheet = user.split('-')
if len(sheet) != 2:
continue
sheet_list.append(sheet)
sorted(sheet_list, key = lambda ele : ele[1]) #HERE IS THE COPIED PART!
if len(sheet_list) > 20: # only top 20 scores are printed
sheet_list = sheet_list[len(sheet_list) - 21 :len(sheet_list) - 1]
#prints scores in a nice table
print "name score"
for user in sheet_list:
try:
name = user[0]
score = user[1]
size = len(name)
for x in range(0,14):
if x > size - 1:
sys.stdout.write(" ")
else:
sys.stdout.write(name[x])
sys.stdout.write(score + "\n")
except:
print ""
except:
print "no scores to be displayed!"
The bug is that the resulting printed list is exactly like how it was in the txt as if the sorting function didn't do anything!
Example:
Data in txt file:
Jerry-1284
Tom-264
Barry-205
omgwtfbbqhaxomgsss-209
Giraffe-1227
What's printed:
Name Score
Jerry 1284
Tom 264
Barry 205
omgstfbbqhaxom209
Giraffe 1227
回答1:
sorted
returns a new list. If you want to modify the existing list, use
sheet_list.sort(key = lambda ele : ele[1])
来源:https://stackoverflow.com/questions/8767779/python-sorted-function-not-working-the-way-it-should