字典打印时的顺序不是由键的值决定的,也不一定是按键的值来排列的。顺序取决于所运行的Python实现,取决于CPython的顺序取决于键的哈希值和插入顺序。在
出于所有意图和目的,您应该假设顺序是随机的。在
换句话说:你的代码是有效的!
如果将0值替换为字符数,这一点会更清楚:>>> symbol_map = dict([(chr(x), x) for x in range(33,64) + range (91,96) + range(123,126)])
>>> symbol_map
{'!': 33, '#': 35, '"': 34, '%': 37, '$': 36, "'": 39, '&': 38, ')': 41, '(': 40, '+': 43, '*': 42, '-': 45, ',': 44, '/': 47, '.': 46, '1': 49, '0': 48, '3': 51, '2': 50, '5': 53, '4': 52, '7': 55, '6': 54, '9': 57, '8': 56, ';': 59, ':': 58, '=': 61, '': 62, '[': 91, ']': 93, '\\': 92, '_': 95, '^': 94, '{': 123, '}': 125, '|': 124}
在这里,您可以看到每个字符都正确地映射到字符的右序数:
^{2}$
字典中的顺序没有什么区别,除非你需要按特定的顺序打印出来。在这种情况下,您可以通过排序来实现:>>> for x in sorted(symbol_map): print x,
...
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? [ \ ] ^ _ { | }
但是在使用它时,通常不需要在按键访问目录时对字典进行排序。在
更新:我以为这些特定的范围是有意为之,但如果您想要一般的标点和数字,请尝试以下方法:>>> import string
>>> symbol_map = dict([(x, 0) for x in string.punctuation + string.digits])
>>> symbol_map.keys()
['!', '#', '"', '%', '$', "'", '&', ')', '(', '+', '*', '-', ',', '/', '.', '1', '0', '3', '2', '5', '4', '7', '6', '9', '8', ';', ':', '=', '', '@', '[', ']', '\\', '_', '^', '`', '{', '}', '|', '~']
与您的差别很小,例如它包括~,但仍然如此。在