按其他列表排序字典列表

时间:2014-09-02 13:02:59

标签: python sorting

按其他列表排序词典列表。 我有字典列表(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':'价值'}]

2 个答案:

答案 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]