通过另一个列表排序字典列表

7 投票
2 回答
2881 浏览
提问于 2025-04-19 09:29

根据另一个列表对字典列表进行排序。

我有一个包含字典的列表(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 排序的内容,可以查看它的 维基页面

撰写回答