按其他列表排序词典列表。
我有字典列表(IN
),我想通过另一个列表(sortValue
)对此进行排序。
IN = [{
"id": "a",
"val": "Value",
"val1": "Value1"
},
{
"id": "b",
"val": "Value",
"val1": "Value1"
},
{
"id": "c",
"val": "Value",
"val1": "Value1"
}]
sortValue = ['b','c','a']
我想要输出
OUT = [{
"id": "b",
"val": "Value",
"val1": "Value1"
},
{
"id": "c",
"val": "Value",
"val1": "Value1"
},
{
"id": "a",
"val": "Value",
"val1": "Value1"
}]
如何得到这样的东西?
我试过了:
OUT = []
for xx in sortValue:
for x in IN:
if x['id'] == xx:
OUT.append(x)
print OUT
del OUT
但是dict的价值是混合的。 [{'val1':'Value1','id':'b','val':'Value'},{'val1':'Value1','id':'c','val':'Value '},{'val1':'Value1','id':'a','val':'价值'}]
答案 0 :(得分:6)
您还可以使用key
功能的sorted
参数。在您的情况下,您需要列表中每个项目的id
的sortValue索引:
>>> pprint(sorted(IN,key=lambda x:sortValue.index(x['id'])))
[{'id': 'b', 'val': 'Value', 'val1': 'Value1'},
{'id': 'c', 'val': 'Value', 'val1': 'Value1'},
{'id': 'a', 'val': 'Value', 'val1': 'Value1'}]
更多关于使用wiki上的python进行排序。
答案 1 :(得分:1)
构建一个字典,将ID映射到具有该ID的字典,然后浏览sortValue
列表并为每个ID值选择字典:
id2dict = dict((d['id'], d) for d in IN)
OUT = [id2dict[x] for x in sortValue]