gpt4 book ai didi

Python - 如何按照指定的属性顺序对对象数组进行双重排序?

转载 作者:行者123 更新时间:2023-12-04 21:01:48 24 4
gpt4 key购买 nike

我有一个这种类型的类

class Challenge():
difficulty = Field(type=float)
category = Field(type=str)

我有一个我想以自定义方式排序的挑战对象列表:我想用自定义顺序按难度排序,然后每个难度我想按类别对对象进行排序,每个对象都有不同的自定义顺序困难。

我已经有一个字典,其中的键是有序的困难,对于每个困难,都有有序的类别列表。我需要将此排序应用于我的列表,但我不知道如何将这些标准应用于排序。

我达到了这一点:
found_challenges.sort(key=lambda x: (x.difficulty, x.category))

显然这不是我想要的排序方式。如何将这些自定义条件应用于列表排序?

例子:
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')

和排序字典是
{
2.0: ['one', 'two'],
1.0: ['two', 'one']
}

所以顺序应该是:
[ch_3, ch_4, ch_2, ch_1]

最佳答案

差不多好了:

found_challenges.sort(key=lambda x: (-x.difficulty, ordering_dict[x.difficulty].index(x.category)))

所以第二个键是相应难度列表中类别的索引。如果您想颠倒顺序,只需添加 -标志。

如果您的困难不仅仅是单调的,请注意 The order of keys in dictionaries .您只能依赖 Python 3.7 中的插入顺序。在以前的版本中,如果要索引键,则需要 OrderedDict .

关于Python - 如何按照指定的属性顺序对对象数组进行双重排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58282954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com