map={"a":5, "b":2, "c":7, "d":5, "e":5}
输出应该是:
['c', 'a', 'd', 'e', 'b']
因此,代码应首先按其值按降序排列字典,然后如果其值相同,则应按键按升序排序.到目前为止我有……
newmap=map
newmap=sorted(newmap.iteritems(), key=operator.itemgetter(1,0),reverse=True)
print newmap
这给了我输出[(‘c’,7),(‘e’,5),(‘d’,5),(‘a’,5),(‘b’,2)].所以,我需要按升序获得e,d,a …而不会弄乱各种数字.我该怎么做呢?
解决方法:
在Python中保证排序是稳定的,所以你要做的就是排序两次:首先是键,然后是值.
sorted_pairs = sorted(sorted(map.iteritems()), key=operator.itemgetter(1), reverse=True)
要从此输出中获取密钥,您可以使用列表解析:
[k for k,v in sorted_pairs]
附:不要将变量命名为与Python类型相同,否则有一天你会感到非常惊讶.
标签:python,sorting