如何迭代按字符串排序的Python字典?

时间:2009-03-23 17:55:11

标签: python

我有一本字典:

{ 'a': 6, 'b': 1, 'c': 2 }

我想通过值迭代,而不是按键。换句话说:

(b, 1)
(c, 2)
(a, 6)

最简单的方法是什么?

4 个答案:

答案 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]