2

Solr から取得した次のようなタプルのリストがあります。

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

2 番目、3 番目、9 番目、11 番目の回路だけが返されたわけではないことに注意してください。

次のような注文タプルに従ってこれを注文する必要があります。

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 に答える