仅对lis中的列表字典值进行排序

2024-09-29 23:32:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这种口述

dict2 = {'value1': [ 2, ['get1', 3], ['post3', 4] ], 'value2' : [1, ['get1', 2], ['post2', 5] ], 'value3' : [7, ['get17', 6], ['post2', 2], ['post3', 3] ] }

我知道如何根据列表中的第一个值(7,2,1)排序。但是,一旦我按第一个值对象对它进行了排序,我只想根据每个列表中的第二个值对列表进行排序。你知道吗

例如这样

'value3' : [7, ['get17', 6], ['post3', 3], ['post2', 2] ],
'value1': [ 2, ['post3', 4], ['get1', 3] ],
'value2' : [1,  ['post2', 5], ['get1', 2] ]

我一直在研究像itemgetter这样的东西,但搞不清楚。这在python中是可能的吗?你知道吗

编辑:

这是我如何排序第一个值对象,打印

for key, value in sorted(dict2.iteritems(), key=lambda (k,v): (v,k), reverse=True):
    print key, value

放入变量中

sort1 = sorted(dict2.items(), key=operator.itemgetter(1, 1), reverse=True)

Tags: 对象key列表post2排序valuepost3sorted
2条回答

您应该考虑以列表或元组的形式获取项,并使用函数或lambda表达式对它们进行排序,如下所示:

items = dict2.items()
items.sort(key=lambda x:x[1][0])

既然您已经知道如何基于dict中的第一个值进行排序,那么让我们集中精力对内部序列进行排序。重要的一步是使用切片来修剪初始值,以便可以对剩余的对进行排序:

>>> for key, seq in dict2.items():
        dict2[key] = seq[:1] + sorted(seq[1:], key=itemgetter(1), reverse=True)


>>> pprint(dict2)
{'value1': [2, ['post3', 4], ['get1', 3]],
 'value2': [1, ['post2', 5], ['get1', 2]],
 'value3': [7, ['get17', 6], ['post3', 3], ['post2', 2]]}

相关问题 更多 >

    热门问题