有一个现有的函数以下面的形式结束,其中d是一个字典:
return d.iteritems()
它返回给定字典的未排序迭代器。我想返回一个迭代器,遍历按键排序的项。我怎么做呢?
有一个现有的函数以下面的形式结束,其中d是一个字典:
return d.iteritems()
它返回给定字典的未排序迭代器。我想返回一个迭代器,遍历按键排序的项。我怎么做呢?
当前回答
格雷格的答案是正确的。注意,在Python 3.0中,你必须这样做
sorted(dict.items())
因为iteritems会消失。
其他回答
还没有对它进行广泛测试,但在Python 2.5.2中可以工作。
>>> d = {"x":2, "h":15, "a":2222}
>>> it = iter(sorted(d.iteritems()))
>>> it.next()
('a', 2222)
>>> it.next()
('h', 15)
>>> it.next()
('x', 2)
>>>
如果你习惯在d.t iteritems()中执行for key, value:…而不是迭代器,这仍然适用于上面的解决方案
>>> d = {"x":2, "h":15, "a":2222}
>>> for key, value in sorted(d.iteritems()):
>>> print(key, value)
('a', 2222)
('h', 15)
('x', 2)
>>>
使用Python 3。X,使用d.items()而不是d.iteritems()返回迭代器。
字典的键存储在哈希表中,因此这是它们的“自然顺序”,即伪随机。任何其他排序都是字典消费者的概念。
Sorted()总是返回一个列表,而不是字典。如果你给它传递一个dict.items()(它会产生一个元组列表),它将返回一个元组列表[(k1,v1), (k2,v2),…它可以在循环中使用,在某种程度上非常像字典,但它无论如何都不是字典!
foo = {
'a': 1,
'b': 2,
'c': 3,
}
print foo
>>> {'a': 1, 'c': 3, 'b': 2}
print foo.items()
>>> [('a', 1), ('c', 3), ('b', 2)]
print sorted(foo.items())
>>> [('a', 1), ('b', 2), ('c', 3)]
下面的感觉像是循环中的dict,但它不是,它是一个元组列表,被解压缩为k,v:
for k,v in sorted(foo.items()):
print k, v
大致相当于:
for k in sorted(foo.keys()):
print k, foo[k]
使用sorted()函数:
return sorted(dict.iteritems())
如果你想在排序结果上使用一个实际的迭代器,因为sorted()返回一个列表,请使用:
return iter(sorted(dict.iteritems()))
如果你想按插入项的顺序排序,而不是按键的顺序排序,你应该看看Python的collections.OrderedDict。(仅限Python 3)
Sorted返回一个列表,因此当你尝试遍历它时,会出现错误, 但是因为你不能订购字典,所以你必须处理一个列表。
我不知道您的代码的大上下文是什么,但您可以尝试添加一个 到结果列表的迭代器。 像这样?:
return iter(sorted(dict.iteritems()))
当然你现在会得到元组,因为排序把字典变成了一个元组列表
例: 假设你的字典是: {“a”:1、“c”:3 b: 2} Sorted将其转换为一个列表:
[('a',1),('b',2),('c',3)]
因此,当您实际遍历列表时,将返回(在本例中)一个元组 由一个字符串和一个整数组成,但至少你可以遍历它。