我的猜測是你將分數保持爲字符串而不是整數。字符串不像整數那樣排序。考慮:
>>> sorted(['2','10','15'])
['10', '15', '2']
>>> sorted([2, 10, 15])
[2, 10, 15]
另一方面:你從分數映射到衝浪者 - 映射應該是相反的。否則,你將無法存儲兩個相同分數的衝浪者。
有了改變到反向映射和處理得分爲整數:
s = '''Fred 3
John 10
Julie 22
Robert 10
Martha 10
Edwin 9'''
scorecard = {}
for line in s.split('\n'):
name, score = line.split()
scorecard[name] = score
keyfunc = lambda item: (int(item[1]), item[0]) # item[1] is cast to int for sorting
for surfer, score in sorted(scorecard.items(), key=keyfunc, reverse=True):
print '%-8s: %2s' % (surfer, score)
結果:
Julie : 22
Robert : 10
Martha : 10
John : 10
Edwin : 9
Fred : 3
如果你想按降序排列變化按字母順序排列的名字和分數keyfunc
至keyfunc = lambda item: (-int(item[1]), item[0])
並從sorted
刪除reverse=True
。
有了這些變化,其結果是:
Julie : 22
John : 10
Martha : 10
Robert : 10
Edwin : 9
Fred : 3
你要我們診斷這個不知道輸入和輸出? –