5

我正在尝试根据其键对 dict 进行排序,并将迭代器返回到类中重写的 iter 方法中的值。有没有比创建一个新列表、在我对键进行排序时插入到列表中更好、更有效的方法?

4

4 回答 4

9

像这样的东西怎么样:

def itersorted(d):
    for key in sorted(d):
        yield d[key]
于 2008-09-19T14:49:06.933 回答
3

到目前为止,最简单的方法,几乎​​可以肯定是最快的方法是:

def sorted_dict(d):
    keys = d.keys()
    keys.sort()
    for key in keys:
        yield d[key]

如果不获取所有键,您将无法进行排序。将所有键提取到一个列表中,然后对该列表进行排序是最有效的方法;列表排序非常快,并且像这样获取键列表的速度尽可能快。然后,您可以创建一个新的值列表或像示例一样生成值。请记住,如果您正在对其进行迭代(下一次迭代将失败),则无法修改该字典,因此如果您想在完成 sorted_dict() 的结果之前修改该字典,请使其返回一个列表.

于 2008-09-19T14:48:21.707 回答
3
def sortedDict(dictobj):
    return (value for key, value in sorted(dictobj.iteritems()))

这将创建一个中间列表,“sorted()”方法返回一个真实列表。但至少它只是一个。

于 2008-09-19T15:54:47.197 回答
-1

假设您需要默认排序顺序,您可以使用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

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

于 2008-09-19T14:53:03.897 回答