Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅对列表中的列表字典值进行排序_Python_List_Sorting_Dictionary - Fatal编程技术网

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

Python 仅对列表中的列表字典值进行排序,python,list,sorting,dictionary,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)对其进行排序。但是,一旦我按第一个值对象对它进行了排序,我只想根据每个列表中的第二个值对列表进行排序 比如像这样, 'valu

我有这种口述

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)

既然您已经知道如何根据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]]}

您应该考虑将这些项作为列表或元组,并用一个函数或lambda表达式排序它们,如:

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

回答得很好,您能详细说明一下
lambda x,y:y[1][0]-x[1][0]
的工作原理吗?
lambda
表达式本质上是临时函数
sort
可以使用比较器,我使用的函数指针就是lambda表达式。如果
xy
,则比较器应返回
-1
,如果
x==y
,则比较器应返回
0
y[1][0]
元组的第一个元素(即列表),是
列表的第0个元素(第一个数字)。如果你想读更多,请看以下几页:这太棒了。但我意识到我最初为第一个值对象排序的方式与此相冲突。请看我的编辑,在一个例子中,我只是打印,在另一个例子中,它会生成一个元组输出,我无法使用上述解决方案。我可以如何实现您给出的解决方案,但首先是第一个值,同时保持字典格式(这样我就可以按值列表排序)吗?