按另一个列表排序字典列表

4

按另一个列表对字典列表进行排序。我有一个带有字典的列表 (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']

I want the output

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'}]


3
请展示你的代码。 - Maroun
你目前做了什么? - El Bert
3
不是同一个 @bvidal - Julio Marins
2个回答

17

您还可以使用sorted函数的key参数。在您的情况下,您想要对列表中每个项目的id进行排序值的索引:

>>> 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进行排序的更多信息,请查看其维基页面


1
建立一个字典,将ID映射到该ID的字典,然后遍历你的sortValue列表,选择每个ID值对应的字典。
id2dict = dict((d['id'], d) for d in IN)
OUT = [id2dict[x] for x in sortValue]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接