2

我有一个从 Solr 返回的元组列表,如下所示:

 [('Second Circuit', 34), ('Ninth Circuit', 24), ('Third Circuit', 4), ('Eleventh Circuit', 2)]

请注意,不仅返回了第二、第三、第九和第十一电路。

我需要根据我拥有的排序元组来排序,如下所示:

COURT_ORDER = (
    'Supreme Court',
    'First Circuit',
    'Second Circuit',
    'Third Circuit',
    'Fourth Circuit',
    ...and so on...,
)

排序后所需的输出将是:

 [('Second Circuit', 34), ('Third Circuit', 4), ('Ninth Circuit', 24), ('Eleventh Circuit', 2)]

有没有聪明的方法来做到这一点?

(如果可能的话,这需要用 Sunburnt 标签进行标记,但由于缺少积分,我无法创建它。)

4

2 回答 2

4

建立一个字典,将法院名称映射到所需的排名。然后使用查找法院名称以查找排名的关键功能进行排序:

>>> COURT_ORDER = (
    'Supreme Court',
    'First Circuit',
    'Second Circuit',
    'Third Circuit',
    'Fourth Circuit',
    'Ninth Circuit',
    'Eleventh Circuit',
)
>>> court_seq = dict(zip(COURT_ORDER, range(len(COURT_ORDER))))
>>> lot = [('Second Circuit', 34), ('Ninth Circuit', 24), ('Third Circuit', 4), ('Eleventh Circuit', 2)]
>>> sorted(lot, key=lambda t: court_seq[t[0]])
[('Second Circuit', 34), ('Third Circuit', 4), ('Ninth Circuit', 24), ('Eleventh Circuit', 2)]

有关如何排序的更多见解,请参阅Sorting HOWTO

于 2011-11-27T08:06:55.300 回答
2

key项目根据其项目在 中index的第一次出现:[0]COURT_ORDER

data = [('Second Circuit', 34), ('Ninth Circuit', 24), ('Third Circuit', 4), ('Eleventh Circuit', 2)]
sorted(data, key = lambda x: COURT_ORDER.index(x[0]))
于 2011-11-27T10:20:07.647 回答