Python中嵌套在列表中的元组的任意排序

2024-03-28 17:41:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表,如下我从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标签来标记,但是我不能创建它,因为缺少点数。)


Tags: 列表排序ordersolrfirst元组secondthird
2条回答

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

data = [('Second Circuit', 34), ('Ninth Circuit', 24), ('Third Circuit', 4), ('Eleventh Circuit', 2)]
sorted(data, key = lambda x: COURT_ORDER.index(x[0]))

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

>>> 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。你知道吗

相关问题 更多 >