Python 如何使用内部列表的值对dict进行排序(两个顺序标准)

Python 如何使用内部列表的值对dict进行排序(两个顺序标准),python,Python,我需要用两个连续的标准对这篇文章进行排序:“排名”下降,“结果”上升(如果排名结果相同) 这篇文章的结构是这样的 'object':['fruit',rank] 例如,我: myDict = {'item2': ['bananas', 3], 'item3': ['cocumbers', 11], 'item1': ['pinapples', 3], 'item4': ['pears', 3]} 我的目标是: {'item3': ['cocumbers', 11], 'item2': ['b

我需要用两个连续的标准对这篇文章进行排序:“排名”下降,“结果”上升(如果排名结果相同)

这篇文章的结构是这样的

'object':['fruit',rank]
例如,我:

myDict = {'item2': ['bananas', 3], 'item3': ['cocumbers', 11], 'item1': ['pinapples', 3], 'item4': ['pears', 3]}
我的目标是:

{'item3': ['cocumbers', 11], 'item2': ['bananas', 3],'item4': ['pears', 3], 'item1': ['pinapples', 3]}

我仅获得正确的排名排序,但对于排名相同的对象,没有排序顺序:

[('item3', ['cocumbers', 11]), ('item2', ['bananas', 3]), ('item1', ['pinapples', 3]), ('item4', ['pears', 3])]
如何在Python2.7中解决这个问题

感谢的排序(myDict.items(),key=lambda(k,v):(-v[1],v[0])

我们应该做到这一点。由于
rank
是一个整数,我们可以通过使键函数只返回负值,而不需要将
reverse=True
关键字设置为
已排序的
,轻松地将其降序排序。在平局的情况下,我们依赖于弦的自然顺序

这是因为python中的序列是按字典顺序排序的(
tuples
是一种序列类型)——python会按顺序比较每个序列中的元素,直到其中一个元素不相等,从而给出序列对的顺序

如果无法用键函数轻松替换
reverse=True
,则需要排序两次:

l1 = sorted(myDict.items(),key=lambda (k,v):v[0])
l1.sort(key=lambda (k,v):v[1],reverse=True)
这取决于有文档记录的事实,即python排序必须是稳定的。换句话说,排序前后相等元素的相对顺序相同。

排序(myDict.items(),key=lambda(k,v):(-v[1],v[0])

我们应该做到这一点。由于
rank
是一个整数,我们可以通过使键函数只返回负值,而不需要将
reverse=True
关键字设置为
已排序的
,轻松地将其降序排序。在平局的情况下,我们依赖于弦的自然顺序

这是因为python中的序列是按字典顺序排序的(
tuples
是一种序列类型)——python会按顺序比较每个序列中的元素,直到其中一个元素不相等,从而给出序列对的顺序

如果无法用键函数轻松替换
reverse=True
,则需要排序两次:

l1 = sorted(myDict.items(),key=lambda (k,v):v[0])
l1.sort(key=lambda (k,v):v[1],reverse=True)

这取决于有文档记录的事实,即python排序必须是稳定的。换句话说,排序前后相等元素的相对顺序是相同的。

您需要使用来维护dict内部的顺序。

您需要使用来维护dict内部的顺序。

字典不是序列,它们不能被排序。有关讨论,请参阅。@unwind:不正确。字典可以排序,但输出只能是列表;我想你的意思是说它们不能按位置排序字典不是序列,它们不能排序。有关讨论,请参阅。@unwind:不正确。字典可以排序,但输出只能是列表;我想你的意思是说它们不能被分类在一个非常优雅的地方!我打算定义一个比较器函数,用于
sorted
cmp
param@inspectorG4dget--我一直建议不要使用
cmp
。它的效率较低(保证每个对象调用一次键函数,
cmp
可以多次调用),而且(更重要的是,
cmp
在python3.x中消失了,非常优雅!我打算定义一个比较器函数,用于
sorted
cmp
param@inspectorG4dget--我一直建议不要使用
cmp
。它的效率较低(保证每个对象调用一次键函数,
cmp
可以多次调用),而且(更重要的是,
cmp
在python3.x中消失了