在 Python 编程学习过程中,掌握字典(dict
)和数值进制转换是两个非常实用的基础技能。前者是处理结构化数据的利器,后者则在数据编码、位运算、程序输出优化中经常出现。同时,练习两者可以帮助养成严谨的思维方式。
本文将通过字典的用法与十进制转任意进制函数的实战实现,带你掌握两大关键知识点。
首先,学习回顾一下字典的相关知识点:
一、字典基础知识详解
字典的特点
-
无序(3.7+ 默认保序,但逻辑上无序)
-
键不可重复,值可重复
-
支持修改与动态添加
-
每个元素都是“键值对”
常见的字典的创建方式:
# 使用花括号创建
d = {"name": "小鸥", "age": 18}
# 使用 dict() 函数创建
d = dict(name="小鸥", age=18)
二、字典的常用操作
添加或修改元素
d["name"] = "小鸥" # 修改已有键
d["sex"] = "男" # 添加新键
字典中键、值、以及键值对的遍历方式的写法:
# 1. 遍历键
for key in d:
print(key)
# 2. 遍历值
for value in d.values():
print(value)
# 3. 遍历键值对
for key, value in d.items():
print(key, value)
结果学习了上面的对于字典的基本操作的实例,相信你对于字典已经有所掌握了。那么对于字典的常用函数、操作方法以及相应的用法介绍,我也做了以下的总结:
三、实战一:统计列表中字符的出现频次
刚才在上文,我们已经学习了字典的相关内容,接下来我们通过一个例子来加强对于字典的认识。
首先,我们创建了一个具有以众多字母为元素的列表,以及用于统计这些字母元素个数的初始字典。
核心思路:
- 创建一个空字典便于对于字母元素的出现次数进行多次统计。
- 利用for循环,将列表中的元素依次进行if条件判断,如果出现那么次数加1,如果没出现那么计数就保存不变为1。
- 最后利用max()和min()函数得到出现次数最多及最少的键(字母元素)。
UU = ["A", "B", "D", "K", "D", "J", "A", "K", "J", "C", "B", "D", "J", "A"]
my_dict = {"A": 0, "B": 0, "C": 0, "D": 0, "J": 0, "K": 0} #最开始的字母统计数量都为0
#"元素":出现次数
for item in UU: #从UU中依次取出元素进行判断
if item in my_dict:
my_dict[item] += 1 #如果元素在my_dirt字典里,统计数量(字典的值)就加1
else:
my_dict[item] = 1 # 处理未定义的键
# 输出出现最少的字符
print("出现次数最少的是 "min(my_dict, key=my_dict.get))
#结果为K
# 输出出现最多的字符
print("出现次数最多的是 " + max(my_dict, key=my_dict.get))
#结果为A
补充说明:
- 要找到最大值对应的键,max() 函数对于字典,我们可以通过指定 key 参数来决定是基于键还是值来获取最大值。
- max(my_dict, key=my_dict.get) 使用 max() 函数来获取字典中值最大的键。key=my_dict.get 表示我们基于字典的值来比较大小。
四、实战二(重点):十进制转任意进制函数(2~16进制)
当你需要将一个十进制数转换成二进制、八进制、十六进制等格式时,内置的 bin()
、oct()
、hex()
虽然好用,但不够通用。下面这段函数能实现从 2 到 16 任意进制转换:
对于数字的判断,我们要考虑数字大于小于等于0的三种情况,接下来进行依次判断。
def transform_num(num,base): #base是基数(也就是所要转化的进制)
if num ==0: #数值等于0的情况
return "0"
digits='0123456789ABCDEF'
result='' #生成一个空字符用于储存之后生成的新字符
is_negative=num <0
num=abs(num) #取绝对值再继续程序
while num >0: #数值大于0的情况
remainder=num % base
result =digits[remainder]+ result #将新字符放到最前面
num=num // base #得到的是数字除以基数之后的整数,用于之后继续判断。
if is_negative :
result="-" +result
return result
print(transform_num(120,2)) # 输出:1111000(二进制)
print(transform_num(31, 14)) # 输出:23(14进制)
对于数字大于0的情况来说,以十进制转二进制为例: remainder=num % base这段代码实现的是26 ÷ 2 = 13 ... 0
→ 余数 0 就是二进制最低位,之后的余数都比这个余数要高位,应该放置在左边。
所有在撰写代码时,需要注意,while语句这部分很容易出错,文中代码部分将新生成的字符放在先前生成的字符之前,也就是从左往右依次是高位到低位的字符。
而如果写成result +=digits[remainder] 就会导致代码运行之后出现错误,因为这样写得到的是从最低位到最高位的字符串,最后还需要反转一次(就需要再添加一个反转函数,这个函数在小编上一篇文章中有详细提及,需要的话可以自行查看。)
总结:
这段代码做的事就像是:
不断把数字除以你想要的进制(base),取每次的“余数”作为结果的每一位,直到除完为止,最后把这些“余数”反过来拼起来。
五、本文小结
-
Python 字典的基础概念与操作方法;
-
如何使用字典进行字符频次统计;
-
重点:实现一个支持 2~16 任意进制转换的十进制转换函数。
这些内容在日常开发中非常实用,字典作为 Python 中最常用的数据结构之一,灵活性极强,建议大家多加练习,例如用来处理词频、分类计数、缓存数据等。尤其是在处理数据、构建基础工具函数时尤为重要。无论是刷题、写项目,还是面试准备,这些知识点都可以帮你打下坚实基础。
如果你对其他 Python 知识点也感兴趣,如列表推导式、集合操作、数据处理库 pandas 的使用,欢迎留言交流!