如何按字符值对字典进行排序?

时间:2014-01-27 13:45:50

标签: python sorting dictionary

我曾经通过

获取排序列表
dicttmp = {5:2, 2:5, 4: 3}
sorteddata = sorted(dicttmp.iteritems(), key = lambda d : d[1])

在python 2.7中。 从上面的代码中,我可以获得一个列表,dicttmp中的每对键和值组成一个元组作为列表中的元素,列表由value dicttmp排序}。

但是现在,我安装了python 3.3,我了解到用户手册中不再支持方法iteritems()。如何获取列表或按dicttmp排序value

有人能帮帮我吗?非常感谢。

3 个答案:

答案 0 :(得分:2)

在Python 3中,iteritems()不再存在; items()方法本身返回一个迭代器,获取项列表的唯一方法是使用list(dicttmp.items())显式创建一个。

此外,您可能希望使用itemgetter模块中的operator函数来提供key函数。它比使用lambda表达式更有效。

from operator import itemgetter
sorted_data = sorted(dicttmp.items(), key=itemgetter(1))

答案 1 :(得分:2)

在Python 3中,dict.iteritems()已被删除,只需使用dict.items()代替:

sorteddata = sorted(dicttmp.items(), key=lambda d: d[1])

答案 2 :(得分:1)

一个建议是使用ordered dict:

来自示例:

>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

>>> # dictionary sorted by key
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

>>> # dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

>>> # dictionary sorted by length of the key string
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])