Gia*_*nna 5 python sorting list
我有一堂课
class Challenge():
difficulty = Field(type=float)
category = Field(type=str)
Run Code Online (Sandbox Code Playgroud)
我有一个想以自定义方式排序的Challenge对象的列表:我想按自定义顺序对难度进行排序,然后针对每个难度,我要按类别对对象进行排序,每个难度都按不同的自定义顺序进行排序困难。
我已经有一个字典,其中按顺序列出了难度,对于每个难度,则列出了类别的排序。我需要将此排序应用于列表,但我不知道如何将这些条件应用于排序。
我到了这一点:
found_challenges.sort(key=lambda x: (x.difficulty, x.category))
Run Code Online (Sandbox Code Playgroud)
显然,这不是按照我想排序的方式排序。如何将这些自定义条件应用于列表排序?
例:
ch_1 = Challenge(difficulty=1.0, category='one')
ch_2 = Challenge(difficulty=1.0, category='two')
ch_3 = Challenge(difficulty=2.0, category='one')
ch_4 = Challenge(difficulty=2.0, category='two')
Run Code Online (Sandbox Code Playgroud)
而订购字典是
{
2.0: ['one', 'two'],
1.0: ['two', 'one']
}
Run Code Online (Sandbox Code Playgroud)
因此排序应为:
[ch_3, ch_4, ch_2, ch_1]
Run Code Online (Sandbox Code Playgroud)
差不多了:
found_challenges.sort(key=lambda x: (-x.difficulty, ordering_dict[x.difficulty].index(x.category)))
Run Code Online (Sandbox Code Playgroud)
所以第二个键是各个难度列表中类别的索引。如果你想颠倒顺序,只需添加一个-符号即可。
如果您的困难不仅仅是单调的,请注意字典中键的顺序。您只能依赖 Python 3.7 中的插入顺序。在以前的版本中,如果您想对键建立索引,则需要一个OrderedDict.