[{'Chinese': 50, 'English': 43, 'Math': 50, 'Name': 'Bob', 'Sport': 74},
{'Chinese': 50, 'English': 50, 'Math': 50, 'Name': 'Dora', 'Sport': 69},
{'Chinese': 50, 'English': 50, 'Math': 50, 'Name': 'Alvin', 'Sport': 50},
{'Chinese': 50, 'English': 50, 'Math': 50, 'Name': 'Eva', 'Sport': 60},
{'Chinese': 80, 'English': 57, 'Math': 44, 'Name': 'Chris', 'Sport': 48}]
排序function如下:
def multikeysort(items, columns):
from operator import itemgetter
comparers = [((itemgetter(col[1:].strip()), -1) if col.startswith('-') else
(itemgetter(col.strip()), 1)) for col in columns]
def comparer(left, right):
for fn, mult in comparers:
result = cmp(fn(left), fn(right))
if result:
return mult * result
else:
return 0
return sorted(items, cmp=comparer)
針對lst多項順序性排序: 預設是升冪排序(小到大) ,欄位多個 '-' 表示降冪排序(大到小)
sorted_lst = multikeysort(lst, ['-Chinese','-Math','-English','Sport'])
[{'Chinese': 80, 'English': 57, 'Math': 44, 'Name': 'Chris', 'Sport': 48},
{'Chinese': 50, 'English': 50, 'Math': 50, 'Name': 'Alvin', 'Sport': 50},
{'Chinese': 50, 'English': 50, 'Math': 50, 'Name': 'Eva', 'Sport': 60},
{'Chinese': 50, 'English': 50, 'Math': 50, 'Name': 'Dora', 'Sport': 69},
{'Chinese': 50, 'English': 43, 'Math': 50, 'Name': 'Bob', 'Sport': 74}]