簡體   English   中英

對詞典/列表列表中的多個參數進行排序

[英]sort on multiple parameters in list of dictionaries/lists

我試圖排序字典和列表列表的多個參數。 我檢查了如何按Python中字典的值對字典列表進行排序?

我有一個復雜的字典:

dict1 = 
{"outer_list" : [ 
#1st dict
{ "id" : 1,
"name" : "xyz",
"nested_list" : [{"id" : "5","key":"val"},{"id" : "4","key":"val"}]
},  

#2nd dict
{ 
"outer_id" : 11,
"name" : "abc",
"nested_list" : [{"id" : "12","key":"val"},{"id" : "8","key" : "val"}]
}
]  # outer_list ends
}  #dict1 ends

我想排序鍵namenested_list[id]和預期輸出:

 [{'outer_id': 11, 'name': 'abc', 'nested_list': [{'id': '8', 'key': 'val'}, {'id': '12', 'key': 'val'}]}, {'nested_list': [{'id': 4, 'key': 'val'}, {'id': 5, 'key': 'val'}], 'id': 1, 'name': 'xyz'}]  

我的嘗試:

def sort_cluster(data):
    for items in data:
        item=items['outer_list']
        newlist = sorted(item, key=itemgetter('name'))
    print newlist


if __name__ == "__main__":
    list1=[]
    list1.append(dict1)
    sort_cluster(list1)

它正確地對名稱進行排序,接下來如果我按照相同的程序對nested_list[id] “newlist”進行排序,它就不起作用了。

對所有嵌套列表進行排序,然后對頂級列表進行排序。 您可以按任何順序執行這些操作。 對於鍵,我更喜歡使用lambdas而不是operator.itemgetter ,因為我們需要將其中一個事物的結果轉換為int(我假設,基於您的預期輸出),並且您必須包裝operator.itemgetter ,在lambda中的operator.itemgetter要做到這一點。

def do_thing(dct):
    lst = dct["outer_list"]

    # Sort the nested_lists, assuming you want to sort by the numeric value of the "id" value
    for obj in lst:
        obj["nested_list"].sort(key=lambda d: int(d["id"]))

    # Sort the outer_list
    lst.sort(key=lambda d: d["name"])

    return lst

然后:

>>> do_thing(dict1)
[{'name': 'abc', 'outer_id': 11, 'nested_list': [{'key': 'val', 'id': '8'}, {'key': 'val', 'id': '12'}]}, 
 {'name': 'xyz', 'nested_list': [{'key': 'val', 'id': '4'}, {'key': 'val', 'id': '5'}], 'id': 1}]

暫無
暫無

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

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