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