排序的字典上__iter__
-
01-07-2019 - |
题
我试图整理一词典基于其关键和返回的一个迭代的价值,从内部的一个复盖iter方法中的一类。是有一个更好和更有效的方式这样做的不是创建一个新的列表,插入名单,因为我排序通过的钥匙?
解决方案
这样的事情怎么样:
def itersorted(d):
for key in sorted(d):
yield d[key]
其他提示
迄今为止最简单的办法,而且几乎可以肯定的速度最快,是沿线的东西:
def sorted_dict(d):
keys = d.keys()
keys.sort()
for key in keys:
yield d[key]
你不能排序没有获取所有的钥匙。获取所有关键进入一个名单,然后排序的名单是最有效的方式来做到这一点;清单分类是非常快,而且取键列表一样,是作为快,因为它可能是。然后,您可以创建一个新的列表的价值或产量的价值作的实例。请记住,你不能修改的字典如果你迭代了它(下一次迭代将会失败)所以如果你想要修改的字典之前你完成结果的sorted_dict(),使其返回的名单。
def sortedDict(dictobj):
return (value for key, value in sorted(dictobj.iteritems()))
这将创建一个单独的中间列表,'sorted()'方法返回一个真实的列表。但至少它只是一个。
假设您需要默认排序顺序,可以使用sorted(list)或list.sort()。如果您需要自己的排序逻辑,Python列表支持基于您传入的函数进行排序的功能。例如,以下是使用函数从最小到最大(默认行为)对数字进行排序的方法。
def compareTwo(a, b):
if a > b:
return 1
if a == b:
return 0
if a < b:
return -1
List.Sort(compareTwo)
print a
这种方法在概念上比手动创建新列表和附加新值更简洁,并允许您控制排序逻辑。
不隶属于 StackOverflow