本帖最后由 timespace 于 2014-05-14 18:50 编辑
回复 6# gxyzwangyi
其实这个规律没有实际意义,当看过dict源代码时自然不会留意这种表面现象,当不看dict源码时这规律也没有帮助,因为其随着输入/内部HASH函数/解决冲突方式/其他优化而改变,这是散列表(哈希表)构造算法决定的,其他语言也是如此(C++ unordered_map, Java HashMap ...)。
可能你仅仅是需要保证输入顺序吧:- Python 2.7.5 (default, Sep 12 2013, 21:33:34)
- [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
- Type "help", "copyright", "credits" or "license" for more information.
- >>> from string import ascii_uppercase
- >>> from collections import OrderedDict
- >>> alphanum = [(b, a+1) for a,b in enumerate(ascii_uppercase)]
- >>> dict(alphanum)
- {'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4, 'G': 7, 'F': 6, 'I': 9, 'H': 8, 'K': 11, 'J': 10, 'M': 13, 'L': 12, 'O': 15, 'N': 14, 'Q': 17, 'P': 16, 'S': 19, 'R': 18, 'U': 21, 'T': 20, 'W': 23, 'V': 22, 'Y': 25, 'X': 24, 'Z': 26}
- >>> OrderedDict(alphanum)
- OrderedDict([('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5), ('F', 6), ('G', 7), ('H', 8), ('I', 9), ('J', 10), ('K', 11), ('L', 12), ('M', 13), ('N', 14), ('O', 15), ('P', 16), ('Q', 17), ('R', 18), ('S', 19), ('T', 20), ('U', 21), ('V', 22), ('W', 23), ('X', 24), ('Y', 25), ('Z', 26)])
- >>>
复制代码 |