极简python之字典

时启发 2024-05-20 10:15:18

上篇对字符串格式化与内置format函数进行了对比学习。其实,字符串的格式化方式还有模板字符串,又或者利用str.replace和正则表达式自行完成占位符替换等方式。都是现成的方法,每种方法都有适应不同场合的应用空间。领会其中一种之后,触类旁通,举一反三,相信能更容易的学到新知识,因此,字符串的内容到此为止。

今天重点讲的是字典。在早几篇,学习容器类基础类型时,我们接触过字典dict,了解到字典是有一组组键值对组成的。为了方便后续学习,先让我们建立一个查小写字母从a-z对应到数值的字典,用以查询某一小写字符的ascii值(内置函数ord就是干这个用的,这里我们给自己弄了一套查询表),见图1:

图1 建立一个英文字母的ascii码对照字典

这样当我们需要查询ascii值,使用字典变量d[小写字母],即可得到对应的值。现在我们打算打印一套对应表出来,以便速查:D。在这之前,我们需要知道字典的键在存储时的顺序通常是不确定的(尽管在我们这个范例中看起来是一样的,但一定要注意关键字的顺序,特别是依赖顺序实现不同功能的时候),所以,在遍历中一定要对关键字进行排序,利用内置函数sorted()即可,见图2:

图2 对字典键的正向和逆向排序

看我们需要的顺序,利用正反不同方向的排序,对字典的关键字进行排序,这里我们采用正序,图3:

图3 打印小写字母asc值对照表

打印内容时,我们使用了字符串的格式化,没记住的重新温习一下喽。结果是出来了,但是如果打印到纸上,就一种感觉——太TM浪费纸张了。所以,我们试着弄成一行五列的形式,键值与键值之间用两个空格分隔。我们先来看看行、列两层嵌套循环的形式,见图4:

图4 以每行五列形式打印小写字母ascii值对照表

以上,唯一的新内容是round函数和字符串的join方法。先来说round()函数,由于每行5列,但小写字母为26个,所以,一共有6行,i的取自范围实际为range(0,6)。round(len(keys)/5 + 0.5)是利用了round(0.5)=0的小技巧,获取len(keys)/5向上取整的值,相当于调用python自带数学函数库math.ceil()的方法,比我们这里采用的方法更直观。当你希望使用更多数学函数时,可以到官方文档里查找下。https://docs.python.org/zh-cn/3/library/math.html。图5:

图5 round函数和math.ceil方法的对照

第二个新的方法是字符串的join方法,参数为可以迭代的对象,返回结果为将可迭代对象串成一个字符串,并用调用join方法所使用的字符串作为分隔符,分隔可迭代对象的各元素。这里不做具体说明和进一步展示。

还记得列表生成式不,上面的示例中由于内层循环有if语句,不能直接套用列表生成式进一步简化。所以,需要改变我们自己的思维。见图6:

图6 用列表生成式简化

由于我们是在解释器内逐行敲的代码,所以最后的if语句横在最后一行数据与前面其他数据之间。这提醒我们,是该慢慢学会定义函数的代码了。现在,定义一个显示字典的函数show_dict(d),并保存到当前目录下,命名为dict_example.py中 见图7:

图7 把代码写入本地文件

现在我们可以采用两种调用方式,一种是在系统控制台命令提示行里,利用python dict_example.py来执行这个范例,见图8。第二种是,在python解释器里,将show_dict函数import进来,享受一下自己做的本地模块的成就感。图9:

图8 命令行中的调用

图8 将自己定义的函数引入到解释器环境,并执行

0 阅读:11

时启发

简介:读书笔记,编程经验,旅途见闻,人生感悟