簡體   English   中英

將字典列表按另一個列表排序

[英]Sort list of dictionaries by another list

按另一個列表對字典列表進行排序。 我有帶有字典的列表( 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':'Value'}]]

您還可以使用已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'}]

有關在其Wiki上使用python進行排序的更多信息。

構建一個字典,將ID映射到具有該ID的字典,然后遍歷sortValue列表並為每個ID值選擇字典:

id2dict = dict((d['id'], d) for d in IN)
OUT = [id2dict[x] for x in sortValue]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM