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 回答