Python学习第三十天—字典(上)

[复制链接]
15271953841 发表于 2024-2-23 06:08:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 15271953841 于 2024-2-23 06:10 编辑

这节课主要学习字典的认识:
跟序列的相辅相成的结构
字典这个数据结构活跃在所有Python程序的背后,即便你的源码里没有直接用到它。——A.M.Kuchling
字典时Python中唯一实现映射关系的内置类型。
那么,映射关系又是什么呢?
例如:摩斯密码

方法一:两个列表的方式:
# 摩斯密文表
c_table = [".-","-...","-.-.","-..",".","..-.",
           "--.","....","..",".---","-.-",".-..",
           "--","-.","---",".--.","--.-",".-.",
           "...","-","..-","...-",".--","-..-",
           "-.--","--..",".----","..---","...--","....-",
           ".....","-....","--...","---..","----.","-----"]
# 摩斯明文表
d_table = ["A","B","C","D","E","F",
           "G","H","I","J","K","L",
           "M","N","O","P","Q","R",
           "S","T","U","V","W","X",
           "Y","Z","1","2","3","4",
           "5","6","7","8","9","0"]
   
code = input("请输入摩斯密码:")
split_code = code.split(" ")
   
result = [d_table[c_table.index(each)] for each in split_code]
print(result)
上面这个列表推导式展开是这个样子的:
result = []
for each in split_code:
_= c_table.index( each)
result.append(d_dable[_])

方法二:一个列表的方式:
# 摩斯密码对比表
c_table = [".-","A","-...","B","-.-.","C","-..","D",
           ".","E","..-.","F","--.","G","....","H",
           "..","I",".---","J","-.-","K",".-..","L",
           "--","M","-.","N","---","O",".--.","P",
           "--.-","Q",".-.","R","...","S","-","T",
           "..-","U","...-","V",".--","W","-..-","X",
           "-.--","Y","--..","Z",".----","1","..---","2",
           "...--","3","....-","4",".....","5","-....","6",
           "--...","7","---..","8","----.","9","-----","0"]

code = input("请输入摩斯密码: ")
split_code = code.split(" ")

result = [c_table[c_table.index(each)+1] for each in split_code]
print(result)
点击编辑模式下最上面的菜单中的”run“菜单的,再点击下拉菜单中的“run module”,于是弹出交互模式,要求输入摩斯密码:
... .... .- -. --. .... .- .. --.. .. .-.. .- .. ... .... ..- .. .-.. .- .. --.. .. .... .- .. ... .... .- -. --.
回车后,显示密码的明文汉语拼音:
['S', 'H', 'A', 'N', 'G', 'H', 'A', 'I', 'Z', 'I', 'L', 'A', 'I', 'S', 'H', 'U', 'I', 'L', 'A', 'I', 'Z', 'I', 'H', 'A', 'I', 'S', 'H', 'A', 'N', 'G']
破译:上海自来水来自海上

方法三:字典的方式:
# 摩斯密码对比表
c_table = {".-":"A","-...":"B","-.-.":"C","-..":"D",
           ".":"E","..-.":"F","--.":"G","....":"H",
           "..":"I",".---":"J","-.-":"K",".-..":"L",
           "--":"M","-.":"N","---":"O",".--.":"P",
           "--.-":"Q",".-.":"R","...":"S","-":"T",
           "..-":"U","...-":"V",".--":"W","-..-":"X",
           "-.--":"Y","--..":"Z",".----":"1","..---":"2",
           "...--":"3","....-":"4",".....":"5","-....":"6",
           "--...":"7","---..":"8","----.":"9","-----":"0"}

code = input("请输入摩斯密码:")
split_code = code.split(" ")

result = [c_table[each] for each in split_code]
print(result)

字典的实现方式,虽然还没学过字典的语法{键:值,键:值,key:value},相比第二种方式的一个列表,首尾的中括号变成了大括号,每个密文元素与其对应的明文字符之间的逗号换成了冒号,前面的密文字符叫“键”,后面的明文字符叫“值”,形成一一对应的“键值对”。
字典的获取方式直截了当,列表只是用来模拟,而字典它内部就是映射关系。
所以在映射类型数据获取上,使用字典的速度要比前两种使用列表的速度快,一个列表查找索引的时间就变长了,因为要遍历元素去找匹配的值,两个列表时单个列表的元素数量少,遍历时间短。

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|鄂ICP备13007585号-4

在本发帖
关注公众号
QQ客服返回顶部