[英]Sort a list of dictionaries by a key, based on the order of keys in a separate list in Python
我有一个字典列表,看起来像这样:
[
{
"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"
}
]
有没有人对如何实现这一点有任何建议? 我很难弄清楚如何做这种事情。
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']])
如果l
是你的dicts列表,那么
sorted(l, key=lambda d: code_order.index(d['code']))
应该做的伎俩。 阅读如下:
key
是在给定dictd
中查找code
,然后在code_order
检查该代码的索引的code_order
,因此最后的排序是通过这些索引进行的。
(如果code_order
真的很大,请记住list.index
需要线性时间,所以最好用字典代替它。但是对于这段简短的code_order
,没关系。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.