通过另一个列表排序字典列表
根据另一个列表对字典列表进行排序。
我有一个包含字典的列表(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
但是字典里的值是混乱的。
[{'val1': 'Value1', 'id': 'b', 'val': 'Value'}, {'val1': 'Value1', 'id': 'c', 'val': 'Value'}, {'val1': 'Value1', 'id': 'a', 'val': 'Value'}]
相关问题:
2 个回答
2
创建一个字典,这个字典的作用是把每个ID对应到一个包含该ID的字典。然后,你可以遍历你的 sortValue 列表,为每个ID值选择相应的字典。
id2dict = dict((d['id'], d) for d in IN)
OUT = [id2dict[x] for x in sortValue]
19
你还可以使用 sorted 函数里的 key 参数。在你的情况下,你想要根据列表中每个项目的 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'}]
想了解更多关于 Python 排序的内容,可以查看它的 维基页面。