我有一本字典:
{ 'a': 6, 'b': 1, 'c': 2 }
我想通过值迭代,而不是按键。换句话说:
(b, 1)
(c, 2)
(a, 6)
最简单的方法是什么?
答案 0 :(得分:38)
sorted(dictionary.items(), key=lambda x: x[1])
对于那些讨厌lambda的人: - )
import operator
sorted(dictionary.items(), key=operator.itemgetter(1))
但是operator
版本需要CPython 2.5 +
答案 1 :(得分:8)
对于非Python 3程序,您需要使用iteritems来提高生成器的性能,这样可以一次生成一个值,而不是一次返回所有生成器。
sorted(d.iteritems(), key=lambda x: x[1])
对于更大的字典,我们可以更进一步,使用关键函数be in C代替Python,就像现在使用lambda一样。
import operator
sorted(d.iteritems(), key=operator.itemgetter(1))
万岁!
答案 2 :(得分:5)
使用 namedtuple 通常非常方便。例如,您有一个名称和分数的字典,并且您想要对“得分”进行排序:
import collections
Player = collections.namedtuple('Player', 'score name')
d = {'John':5, 'Alex':10, 'Richard': 7}
首先以最低分数排序:
worst = sorted(Player(v,k) for (k,v) in d.items())
首先以最高分数排序:
best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)
列出的元组中'key'和'value'的顺序是(value,key),但是现在你可以得到名字和得分,让我们说第二好的玩家(index = 1)非常像Python一样这样:
player = best[1]
player.name
'Richard'
player.score
7
答案 3 :(得分:3)
items
方法为您提供了(键,值)元组的列表,可以使用sorted
和自定义排序键对其进行排序:
Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13)
>>> a={ 'a': 6, 'b': 1, 'c': 2 }
>>> sorted(a.items(), key=lambda (key,value): value)
[('b', 1), ('c', 2), ('a', 6)]
在Python 3中,lambda表达式必须更改为lambda x: x[1]
。