有一个现有的函数以下面的形式结束,其中d是一个字典:
return d.iteritems()
它返回给定字典的未排序迭代器。我想返回一个迭代器,遍历按键排序的项。我怎么做呢?
有一个现有的函数以下面的形式结束,其中d是一个字典:
return d.iteritems()
它返回给定字典的未排序迭代器。我想返回一个迭代器,遍历按键排序的项。我怎么做呢?
当前回答
一般来说,字典可以这样排序:
for k in sorted(d):
print k, d[k]
对于问题中的特定情况,对d.t iteritems()进行“drop in replacement”,添加如下函数:
def sortdict(d, **opts):
# **opts so any currently supported sorted() options can be passed
for k in sorted(d, **opts):
yield k, d[k]
所以终点线从
return dict.iteritems()
to
return sortdict(dict)
or
return sortdict(dict, reverse = True)
其他回答
假设你使用的是CPython 2。X,并且有一个大的字典mydict,那么使用sorted(mydict)将会很慢,因为sorted构建了一个mydict的键的排序列表。
在这种情况下,你可能想看看我的ordereddict包,其中包括一个C语言的sorteddict的C实现,特别是如果你必须在不同的阶段多次检查排序的键列表(例如。元素数量)的字典生命周期。
http://anthon.home.xs4all.nl/Python/ordereddict/
一般来说,字典可以这样排序:
for k in sorted(d):
print k, d[k]
对于问题中的特定情况,对d.t iteritems()进行“drop in replacement”,添加如下函数:
def sortdict(d, **opts):
# **opts so any currently supported sorted() options can be passed
for k in sorted(d, **opts):
yield k, d[k]
所以终点线从
return dict.iteritems()
to
return sortdict(dict)
or
return sortdict(dict, reverse = True)
Sorted返回一个列表,因此当你尝试遍历它时,会出现错误, 但是因为你不能订购字典,所以你必须处理一个列表。
我不知道您的代码的大上下文是什么,但您可以尝试添加一个 到结果列表的迭代器。 像这样?:
return iter(sorted(dict.iteritems()))
当然你现在会得到元组,因为排序把字典变成了一个元组列表
例: 假设你的字典是: {“a”:1、“c”:3 b: 2} Sorted将其转换为一个列表:
[('a',1),('b',2),('c',3)]
因此,当您实际遍历列表时,将返回(在本例中)一个元组 由一个字符串和一个整数组成,但至少你可以遍历它。
格雷格的答案是正确的。注意,在Python 3.0中,你必须这样做
sorted(dict.items())
因为iteritems会消失。
你现在也可以在Python 2.7中使用OrderedDict:
>>> from collections import OrderedDict
>>> d = OrderedDict([('first', 1),
... ('second', 2),
... ('third', 3)])
>>> d.items()
[('first', 1), ('second', 2), ('third', 3)]
这里有2.7版本的what's new页面和OrderedDict API。