为何字符统计字典的键值顺序随机不同?与添加顺序不符?
字符计数字典顺序问题解析
先看你用到的示例代码:
s = 'paper' t = 'title'
你用普通字典统计字符计数时,遇到键顺序随机、数值返回顺序不一致的情况,核心原因分两种情况:
Python版本差异导致的顺序问题
在Python 3.7之前,普通字典基于哈希表实现,完全不保证键的插入顺序。键的存储位置由字符的哈希值计算得出,而哈希值会受Python版本、运行环境等因素影响,所以遍历字典时,键的顺序看起来是随机的,和你添加字符的顺序无关。即使是Python 3.7+,两个字典的插入顺序本身就不同
Python 3.7及以后的字典会保留键的插入顺序,但你统计的是两个不同字符串的字符:- 统计
s='paper'时,字符出现顺序是p→a→p→e→r,字典的键会按p、a、e、r的顺序插入; - 统计
t='title'时,字符出现顺序是t→i→t→l→e,字典的键会按t、i、l、e的顺序插入。
两个字典的键集合和插入顺序本来就不一样,遍历出来的结果顺序自然不同。
- 统计
如果需要让结果按固定顺序展示,有几个实用方法:
- 用
collections.Counter(字典的子类)统计字符,3.7+同样保留插入顺序,统计逻辑更简洁; - 统计完成后,手动按指定顺序(比如原字符串的字符出现顺序、字母表顺序)整理结果;
- 兼容旧版本的话,可以用
collections.OrderedDict来存储计数。
内容的提问来源于stack exchange,提问作者Jayaditya Sethi
相关产品推荐
相关产品推荐

