我试图整理一词典基于其关键和返回的一个迭代的价值,从内部的一个复盖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

这种方法在概念上比手动创建新列表和附加新值更简洁,并允许您控制排序逻辑。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top