仅排序列表中列表的字典值

时间:2016-06-09 15:10:08

标签: python list sorting dictionary

我有这种类型的词典;

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)

2 个答案:

答案 0 :(得分:2)

您应该考虑将这些项目作为列表或元组,并使用函数或lambda表达式对它们进行排序,如下所示:

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

答案 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]]}