Python-3.x:根据每个列表中的项目数反向排序列表字典

问题描述 投票:0回答:1

我想根据每个列表中的项目数反向排序列表字典,并保留密钥以便进一步处理。即我不希望返回一个列表。

例:

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

在对dict进行排序之后,所需的输出应该是这样的:

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

正如您所看到的那样,密钥已经消失,数据无法进行进一步处理。

我错过了什么?非常感谢能帮助我解决这个问题的人。

python python-3.x sorting dictionary
1个回答
0
投票

看起来你有两个级别的处理:首先是键,然后是值的长度。

根据我上面的评论,输出是一个元组列表,因为当前排序的字典被认为是一个实现细节。

如果您想使用有序词典,请使用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])])
© www.soinside.com 2019 - 2024. All rights reserved.