2

次のような辞書のリストがあります。

[
    {
        "format": "format1",
        "code": "tr"
    },
    {
        "format": "format2",
        "code": "hc"
    },
    {
        "format": "format3",
        "code": "bx"
    },
    {
        "format": "format4",
        "code": "mm"
    },
    {
        "format": "format5",
        "code": "el"
    }
]

コードキーの値に基づいてこのリストを並べ替える必要がありますが、コードの順序は別のリストによって決定されます。

code_order = ["mm", "hc", "el", "tr", "bx"]

したがって、最終的なリストは次のようになります。

[
    {
        "format": "format4",
        "code": "mm"
    },
    {
        "format": "format2",
        "code": "hc"
    },
    {
        "format": "format5",
        "code": "el"
    },
    {
        "format": "format1",
        "code": "tr"
    },
    {
        "format": "format3",
        "code": "bx"
    }
]

誰かがこれを達成する方法について何か提案がありますか?私はこの種の方法を理解するのに苦労しています。

4

2 に答える 2

4

Python 2.7+:

lookup = {s: i for i, s in enumerate(code_order)}
print(sorted(l, key=lambda o: lookup[o['code']]))

古い:

lookup = dict((s, i) for i, s in enumerate(code_order))
print sorted(l, key=lambda o: lookup[o['code']])
于 2013-03-07T20:06:33.573 に答える
3

l口述のリストである場合、

sorted(l, key=lambda d: code_order.index(d['code']))

トリックを行う必要があります。それを次のように読みます。

keycodeは、指定された dictを検索し、dでそのコードのインデックスをチェックする関数であるcode_orderため、最終的な並べ替えはそれらのインデックスによって行われます。

(code_orderが非常に大きくなる場合は、list.index線形時間がかかることに注意してください。そのため、dict に置き換えることをお勧めします。しかし、この短いcode_orderの場合は問題になりません。)

于 2013-03-07T20:03:15.663 に答える