我有一个看起来像这样的字典列表:
[
{
"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
是你的字典列表,那么
sorted(l, key=lambda d: code_order.index(d['code']))
应该可以解决问题。读作:
是在给定字典key
中查找code
的函数,然后在d
中检查该代码的索引,因此最终排序是通过这些索引进行的。code_order
(如果
code_order
变得非常大,那么请记住 list.index
需要线性时间,所以你最好用字典替换它。但是对于这个短的 code_order
,它应该无关紧要。)
您可以使用
person_list
对name_order
进行排序,如下所示:
person_list = [
{'name':'Bob','age':18}, {'name':'Kai','age':36}, {'name':'Ada','age':24}
]
name_order = ['Kai', 'Ada', 'Bob']
print(sorted(person_list, key=lambda x: name_order.index(x['name'])))
输出:
[
{'name':'Kai', 'age':36}, {'name':'Ada', 'age':24}, {'name':'Bob','age':18}
]