在__iter__上排序字典
我想根据字典的键来排序,然后在一个类里重写的迭代方法中返回一个值的迭代器。有没有比创建一个新列表、在排序过程中把值插入到这个列表里更好、更有效的方法呢?
4 个回答
3
def sortedDict(dictobj):
return (value for key, value in sorted(dictobj.iteritems()))
这段话的意思是,这个方法会生成一个中间的列表,而'sorted()'这个方法会返回一个真正的列表。不过至少它只会生成一个列表。
3
最简单的方法,几乎可以说是最快的,类似于下面这样:
def sorted_dict(d):
keys = d.keys()
keys.sort()
for key in keys:
yield d[key]
要排序,必须先获取所有的键。把所有的键放到一个列表里,然后对这个列表进行排序,是最有效的做法;因为列表排序非常快,而以这种方式获取键的列表也是最快的。接下来,你可以创建一个新的值列表,或者像示例那样逐个返回这些值。需要注意的是,如果你在遍历字典的时候,不能修改它(否则下一次遍历会出错),所以如果你想在完成sorted_dict()
的结果之前修改字典,最好让它返回一个列表。
9
这样怎么样:
def itersorted(d):
for key in sorted(d):
yield d[key]