小写字母映射从1开始的连续整数:字典推导式问题排查
问题原因
- 双层循环覆盖值:你的字典推导式用了两层嵌套循环,外层遍历字母,内层遍历
range(1, 20)。每遍历一个字母时,内层循环会把该字母的value从1到19逐个覆盖,最终所有字母的value都会被更新为内层循环的最后一个值19。 - 字母字符串拼写错误:你写的字母串
'abcdefghijklmnopqrstunvwxyz'存在错误——多了一个n,同时缺少了x,导致最终字典里没有x,还重复处理了n。
实现目标字典的几种方法
方法1:使用enumerate(最直观)
enumerate会返回元素的索引和对应值,索引从0开始,加1即可得到从1起始的连续整数:
dict1 = {char: idx + 1 for idx, char in enumerate('abcdefghijklmnopqrstuvwxyz')} print(dict1)
方法2:利用ord()函数
通过字符的ASCII码计算对应数值,'a'的ASCII码是97,用目标字符的ASCII码减去97再加1即可:
dict1 = {char: ord(char) - ord('a') + 1 for char in 'abcdefghijklmnopqrstuvwxyz'} print(dict1)
方法3:用zip打包配对
将字母序列和range(1,27)(包含1到26的整数)打包成键值对,再转成字典:
dict1 = dict(zip('abcdefghijklmnopqrstuvwxyz', range(1, 27))) print(dict1)
内容的提问来源于stack exchange,提问作者tokman
相关产品推荐
相关产品推荐

