Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按键按排序顺序遍历Python字典_Python_Loops_Sorting_Dictionary - Fatal编程技术网

按键按排序顺序遍历Python字典

按键按排序顺序遍历Python字典,python,loops,sorting,dictionary,Python,Loops,Sorting,Dictionary,我有一本Python字典,看起来像这样: D = {1:'a', 5:'b', 2:'a', 7:'a'} 键的值基本上是不相关的。有没有办法按数字顺序按键遍历字典?这些键都是整数 而不是说 for key in D: # some code... 我可以按1、2、5、7的顺序浏览字典键吗 此外,我无法使用排序/排序功能。您可以使用dict.keys()获取键列表,然后在列表的排序视图上迭代: for key in sorted(D.keys()): print key, D

我有一本Python字典,看起来像这样:

D = {1:'a', 5:'b', 2:'a', 7:'a'}
键的值基本上是不相关的。有没有办法按数字顺序按键遍历字典?这些键都是整数

而不是说

for key in D:
    # some code...
我可以按
1、2、5、7的顺序浏览字典键吗


此外,我无法使用排序/排序功能。

您可以使用
dict.keys()
获取键列表,然后在列表的排序视图上迭代:

for key in sorted(D.keys()):
    print key, D[key]
您可以使用以下选项:

for key in sorted(D.iterkeys()):
    .. code ..

在Python3.x中,使用
D.keys()
(与Python2.x中的
D.iterkeys()
相同)。

考虑到您不想排序的规定,并假设键都是整数,您只需找到键的最大值和最小值,然后在该范围内迭代,并检查每个字段是否都在字典中

for key in xrange(min(D), max(D) + 1):
    if key in D:
        print D[key]

当然,这不是很有效,但它会起作用,并避免排序。

假设按顺序插入键/值,您可以使用:


有没有一种方法可以在不显式使用sort函数的情况下执行此操作?这是一个挑战的一部分,我们必须在不使用排序函数的情况下对所有内容进行排序。对不起,我应该早点提到这件事。最后一件事。你知道还有什么其他方法可以把钥匙分类吗?我真的很感谢你的帮助。请求不要分类。。。然后接受排序:/这就是生活;)有人对这部电影的表现有何评论?如果这种循环需要经常发生该怎么办。
sorted()
是否每次都重新排序?是否有办法始终按键对dict排序,以便按键顺序进行迭代是有效的?类似于 STD::C++中的map < /Cord>。有没有办法在不使用排序函数的情况下实现这一点?这是一个挑战的一部分,我们必须在不使用排序函数的情况下对所有内容进行排序。“对不起,我应该早点提到这件事。”本。然后,您必须编写自己的排序逻辑。但是你为什么要重新发明轮子呢?通常是因为有人在CS作业中使用堆栈溢出。这是一个聪明的黑客。但如果字典里只有两个键,
1
1000000
,那真的是一个杀伤力太大了吗??你说呢?是的,分类肯定更好!如果你不想改变现有的字典,只需为你的有序字典创建一个临时变量,并将它设置为OrderedDict(d)>>从集合导入OrderedDict>>>a={'a':'a','b':'b','c':'c'}>>OrderedDict(a)returns->OrderedDict([('a','a'),('b','b'),('c','c'))
>>> 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]