我知道可以使用以下方法对其值进行排序:
>>> mydict = {'silver': 300, 'gold': 500, 'bronze': 100, 'platinum': 1000}
>>> items = mydict.items()
>>> print sorted([value for key, value in items])
[100, 300, 500, 1000]
但是如果我想对里面的值进行排序,那么我还有钥匙呢?输出应如下所示:
{'platinum': 1000, 'gold': 500, 'silver': 300, 'bronze': 100}
有没有办法实现这个目标?
答案 0 :(得分:6)
你不能得到字典作为结果,因为那些本质上是无序的。您可以获得(键,值)对的列表,如果您使用key
参数,则相当容易。例如:
sorted(mydict, key=mydict.get)
对于降序,请反转结果列表或将reverse=True
作为另一个参数传递给sorted
。
请注意,您可以使用其结果构建OrderedDict。
答案 1 :(得分:2)
字典是无序数据结构,因此无法对其进行排序。但是你可以将它转换为元组列表并在元组的第二项上进行排序:
>>> mydict = {'silver': 300, 'gold': 500, 'bronze': 100, 'platinum': 1000}
>>> sorted(mydict.items(), key = lambda (metal, price): -price)
[('platinum', 1000), ('gold', 500), ('silver', 300), ('bronze', 100)]
答案 2 :(得分:2)
>>> mydict = {'silver': 300, 'gold': 500, 'bronze': 100, 'platinum': 1000}
>>> from operator import itemgetter
>>> from collections import OrderedDict
>>> od = OrderedDict(sorted(mydict.items(), key=itemgetter(1), reverse=True))
>>> od
OrderedDict([('platinum', 1000), ('gold', 500), ('silver', 300), ('bronze', 100)])
答案 3 :(得分:1)
如果您只想做打印,那么您仍然拥有钥匙;只打印那些:
from operator import itemgetter
print '{' + ', '.join([': '.join(map(repr, item)) for item in sorted(items, key=itemgetter(1), reverse=True)]) + '}'
输出:
>>> print '{' + ', '.join([': '.join(map(repr, item)) for item in sorted(mydict.items(), key=itemgetter(1), reverse=True)]) + '}'
{'platinum': 1000, 'gold': 500, 'silver': 300, 'bronze': 100}
答案 4 :(得分:1)
你试过这个吗,
mydict = {'silver': 300, 'gold': 500, 'bronze': 100, 'platinum': 1000}
from operator import itemgetter
sorted(mydict.items(), key=itemgetter(1), reverse=True)
o/p = > [('platinum', 1000), ('gold', 500), ('silver', 300), ('bronze', 100)]
答案 5 :(得分:0)
无法按定义对字典进行排序。您可能希望检索其项目并将其添加到已排序的数组中。