我見過更簡單的例子,但我試圖變得更復雜,但無法解決。
如果我有一個 OrderedDict,其中的鍵描述了一個人,而值是他們的 [年齡、性別、頭發顏色] 的串列。
from collections import OrderedDict
myOD = OrderedDict(adultMale1=[50, 'male', 'grey'], babyFemale=[1, 'female', 'red'], teenMale=[13, 'male', 'blonde'], teenFemale=[13, 'female', 'red'], adultMale2=[50, 'male', 'blonde'])
print myOD.keys()
# Result: myOD: ['teenMale', 'babyFemale', 'adultMale2', 'teenFemale', 'adultMale1']
我想要的是首先按年齡,然后按性別,然后按頭發顏色對 OrderedDict 進行排序。這將是我正在尋找的正確結果。
# Result: ['babyFemale', 'teenFemale', 'teenMale', 'adultMale2', 'adultMale1']
我想出了一種按年齡排序的方法。
sortAgeList = []
for v in myOD.values():
sortAgeList.append(v[0])
sortAgeList.sort()
myNewOD = OrderedDict()
for age in sortAgeList:
for key, value in myOD.items():
if value[0] == age:
myNewOD[key] = myOD[key]
print 'myNewOD: ', myNewOD.keys()
# Result: myNewOD: ['babyFemale', 'teenMale', 'teenFemale', 'adultMale2', 'adultMale1']
但是,我嘗試了多種方法來推斷這種方法,然后重新排序所有相同年齡的決勝局,然后再次排序任何相同性別的決勝局,但它變得非常復雜,我一直認為必須成為更簡單的方法。
我希望那里有人有想法來幫助我。謝謝大家。
uj5u.com熱心網友回復:
默認排序順序已經是lexicographic。
>>> sorted(myOD, key=myOD.get)
['babyFemale', 'teenFemale', 'teenMale', 'adultMale2', 'adultMale1']
所以:
>>> from operator import itemgetter
>>> OrderedDict(sorted(myOD.items(), key=itemgetter(1)))
OrderedDict([('babyFemale', [1, 'female', 'red']),
('teenFemale', [13, 'female', 'red']),
('teenMale', [13, 'male', 'blonde']),
('adultMale2', [50, 'male', 'blonde']),
('adultMale1', [50, 'male', 'grey'])])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/346953.html
