我在Python的字典,这些看起来像这样:迭代通过按键Python字典的排序顺序
D = {1:'a', 5:'b', 2:'a', 7:'a'}
键的值大多是不相关的。有没有办法按数字顺序按键遍历字典?钥匙都是整数。
与其说
for key in D:
# code...
我可以顺利通过的顺序1,2,5,7字典键?感谢您的帮助提前。
此外,我不能使用排序/排序功能。
我在Python的字典,这些看起来像这样:迭代通过按键Python字典的排序顺序
D = {1:'a', 5:'b', 2:'a', 7:'a'}
键的值大多是不相关的。有没有办法按数字顺序按键遍历字典?钥匙都是整数。
与其说
for key in D:
# code...
我可以顺利通过的顺序1,2,5,7字典键?感谢您的帮助提前。
此外,我不能使用排序/排序功能。
您可以使用此:
for key in sorted(D.iterkeys()):
.. code ..
在Python 3.x中,使用D.keys()
(与Python 2.x中的D.iterkeys()
相同)。
你可以使用dict.keys()
键的列表,然后遍历列表的排序视图:
for key in sorted(D.keys()):
print key, D[key]
有没有办法做到这一点,而不明确使用排序功能?这是挑战的一部分,我们必须在不使用排序功能的情况下对所有内容进行排序。对不起,我应该早些提到这一点。 – ben 2013-02-13 21:36:40
@ben。那么你将不得不编写自己的排序逻辑。但你为什么要重新发明轮子? – 2013-02-13 21:37:56
通常是因为有人为他的CS作业使用堆栈溢出。 – 2017-09-26 18:14:22
考虑到您不想排序的规定,并且假设键都是整数,您可以简单地找到键的最大值和最小值,然后遍历该范围并检查每个键是否实际在字典里。
for key in xrange(min(D), max(D) + 1):
if key in D:
print D[key]
这是不是很有效,当然,但它会工作,它避免了排序。
这是一个聪明的黑客。但是,如果字典中只有2个键,'1'和'1000000'?说啥? – 2013-02-13 21:43:57
是的,排序绝对更好! – kindall 2013-02-13 21:45:09
这仍然给OP确切的他想要的。 – 2013-02-13 21:46:16
假设键/值插入顺序,您可以使用OrderedDict:
>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d[1] = 'a'
>>> d[2] = 'a'
>>> d[5] = 'b'
>>> d[7] = 'a'
>>> d
OrderedDict([(1, 'a'), (2, 'a'), (5, 'b'), (7, 'a')])
>>> d.keys()
[1, 2, 5, 7]
如果您不想更改现有字典,只需为您的有序字典建立一个临时变量,并将其设置为来自集合的OrderedDict(D) >>> import a OrderedDict >>> a = {'a':' A','b':'B','c':'C'} >>> OrderedDict(a) returns - > OrderedDict([('a','A'),('b',' B'),('c','C')]) – 2015-06-19 17:52:08
的可能的复制(HTTP [在Python,我怎么遍历在有序字典?]:/ /stackoverflow.com/questions/364519/in-python-how-do-i-iterate-over-a-dictionary-in-sorted-order) – 2016-07-24 22:50:03