我有这种类型的词典;
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)
答案 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]]}