簡體   English   中英

Python-3.x:根據每個列表中的項目數對列表字典進行反向排序

[英]Python-3.x: Reverse sort a dictionary of lists based on number of items in each list

我想根據每個列表中的項目數對列表字典進行反向排序,並保留鍵以進行進一步處理。 即我不希望返回列表。

例:

test = {346: [235, 238], 347: [129, 277], 348: [115, 191, 226], 349: [194, 328], 351: [150, 70, 118], 352: [123, 334], 353: [161, 196]}

對字典進行排序后,所需的輸出應為:

test = {348: [115, 191, 226], 351: [150, 70, 118], 346: [235, 238], 347: [129, 277], 349: [194, 328], 352: [123, 334], 353: [161, 196]}

到目前為止,我想出的是:

def get_length(element):
    return len(element)


test = {346: [235, 238], 347: [129, 277], 348: [115, 191, 226], 349: [194, 328], 351: [150, 70, 118], 352: [123, 334], 353: [161, 196]}

s = sorted(test.values(), key=get_length, reverse=True)

它可以按要求正確排序,但是這破壞了我的字典並導致:

s = [[115, 191, 226], [150, 70, 118], [235, 238], [129, 277], [194, 328], [123, 334], [161, 196]]

如您所見,鍵不見了,數據對於進一步處理毫無用處。

我想念什么? 非常感謝任何可以幫助我解決此問題的人。

看來您有2個處理級別:首先是按鍵,然后是值的長度。

根據我上面的評論,輸出是一個元組列表,因為當前排序的字典被視為實現細節。

如果要使用有序詞典,請使用以下collections.OrderedDict

from collections import OrderedDict

test = {346: [235, 238], 347: [129, 277], 348: [115, 191, 226], 349: [194, 328], 351: [150, 70, 118], 352: [123, 334], 353: [161, 196]}

s1 = OrderedDict(sorted(test.items()))
s2 = sorted(s1.items(), key=lambda k: len(s1[k[0]]), reverse=True)

# [(348, [115, 191, 226]),
#  (351, [150, 70, 118]),
#  (346, [235, 238]),
#  (347, [129, 277]),
#  (349, [194, 328]),
#  (352, [123, 334]),
#  (353, [161, 196])]

d = OrderedDict(s2)

# OrderedDict([(348, [115, 191, 226]),
#              (351, [150, 70, 118]),
#              (346, [235, 238]),
#              (347, [129, 277]),
#              (349, [194, 328]),
#              (352, [123, 334]),
#              (353, [161, 196])])

暫無
暫無

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

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