如何使用级联列表值重新排序 python OrderedDict

How to reorder a python OrderedDict using cascading list values

我见过这方面的更简单的示例,但我试图变得更复杂一点,但无法解决。

如果我有一个 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']

但是,我尝试了多种方法来推断这种方法,然后重新排序所有年龄相同的决胜者,然后再次对所有性别相同的决胜者进行排序,但它变得非常复杂并且我一直在想一定有更简单的方法。

我希望有人有想法来帮助我。提前谢谢大家。

默认排序顺序已经是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'])])