有一个现有的函数以下面的形式结束,其中d是一个字典:
return d.iteritems()
它返回给定字典的未排序迭代器。我想返回一个迭代器,遍历按键排序的项。我怎么做呢?
有一个现有的函数以下面的形式结束,其中d是一个字典:
return d.iteritems()
它返回给定字典的未排序迭代器。我想返回一个迭代器,遍历按键排序的项。我怎么做呢?
当前回答
假设你使用的是CPython 2。X,并且有一个大的字典mydict,那么使用sorted(mydict)将会很慢,因为sorted构建了一个mydict的键的排序列表。
在这种情况下,你可能想看看我的ordereddict包,其中包括一个C语言的sorteddict的C实现,特别是如果你必须在不同的阶段多次检查排序的键列表(例如。元素数量)的字典生命周期。
http://anthon.home.xs4all.nl/Python/ordereddict/
其他回答
使用sorted()函数:
return sorted(dict.iteritems())
如果你想在排序结果上使用一个实际的迭代器,因为sorted()返回一个列表,请使用:
return iter(sorted(dict.iteritems()))
假设你使用的是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)
格雷格的答案是正确的。注意,在Python 3.0中,你必须这样做
sorted(dict.items())
因为iteritems会消失。
如果你想按插入项的顺序排序,而不是按键的顺序排序,你应该看看Python的collections.OrderedDict。(仅限Python 3)