Python-字典
字典
字典是Python中唯一实现映射关系
的内置类型
1. 解决单表代换密码问题
1.1 模拟字典方法
以下不是真正的字典,但可以实现类似的功能
- 通过两个列表对照实现
1
2
3
4
5
6 c_table = ["cipher1", "cipher2"...] # 密文表
d_table = ["plain1", "plain2"...] # 明文表
cipher = input("input your cipher") # 输入密文
split_cipher = cipher.split(" ") # 密文拆分
result = [d_table[c_table.index(each)] for each in split_cipher] # 通过查找密文下标找到对应下标明文来解密
print(result) # 打印结果- 通过一个列表实现
1
2
3
4
5 table = ["cipher1", "plain1", "cipher2", "plain2" ...]
cipher = input(...) # 输入密文
split_cipher = cipher.split(" ") # 密文拆分
result = [table[table.index(each) + 1] for each in split_cipher] # 通过查找密文下标,得到其下一位,即对应的明文
print(result) # 打印结果这两种方法在处理小量数据的时候和字典效率相差不大,但由于其数据结构本身不是映射关系,实际在处理大量数据时效率远不及字典
1.2 字典方法
1 | table = {"cipher1":"plain1", "cipher2":"plain2", "cipher3":"plain3"...} |
2. 字典基础用法
Python中,字典内一对数据叫做一个键值对
:dic = {“键”:”值”},一个键对应一个值
2.1 字典的6种一般声明方法
1 | a = {"alpha":"a", "bravo":"b"...} |
2.2 fromkeys声明
fromkeys(iterable, value) 其中value是可选参数,默认为None
1
2 dic = dict.fromkeys("Momoyeyu", 0) # 键被看作集合,重复的o和y只会存一个
print(dic)
Output
{‘M’: 0, ‘o’: 0, ‘m’: 0, ‘y’: 0, ‘e’: 0, ‘u’: 0}
2.3 修改字典
1
2
3
4
5
6 dic = dict.fromkeys("Momoyeyu", 0)
print(dic)
dic["M"] = 1 # 改
dic["New"] = 2 # 增
dic.pop("o") # 删 (pop的返回值是删除的值)
print(dic)Output:
{‘M’: 0, ‘o’: 0, ‘m’: 0, ‘y’: 0, ‘e’: 0, ‘u’: 0}
{‘M’: 1, ‘m’: 0, ‘y’: 0, ‘e’: 0, ‘u’: 0, ‘New’: 1}键被当作下标使用,这也解释了为什么键要被视为集合储存:
具有无序性和唯一性
一个字典中没有两个相等的键,但不同的键可以关联同一个值,键重复了就用新的值覆盖旧的值
2.3.1 关于删除
dic.pop(key, default)
若pop的键key不存在dic中,pop会报错,但也可以通过可选参数default来设置报错内容dic.popitem()
在python3.7以后的版本,字典的键值对才有储存顺序,popitem会弹出最后一个加入字典dic的键值对
但在python3.7以前的版本,popitem会随机弹出一个键值对del关键词
通过 del dic[‘键’] 也可以删除一个键值对,也可以 del dic 直接删除字典,注意和 dic.clear() 区分clear()
通过 dic.clear() 可以得到空字典,注意和 del dic 区分
3. 其他字典函数
函数 | 功能 |
---|---|
dic.get(key, default=None) | 查找key对应的value,不存在则返回None |
dic.setdefault(key, value) | 查找key的值,若key存在,返回key原本的value;若key不存在,则把键值对key:value添加到dic中 |
dic.keys() | 返回dic的键的视图对象 |
dic.values() | 返回dic的值的视图对象 |
dic.items() | 返回dic的字典视图对象 |
3.1 关于视图对象
视图对象是字典的动态
视图,字典改变的时候,其视图对象会随之改变
1
2
3
4
5
6
7
8
9 dic = dict.fromkeys("Momoyeyu", 0)
keys = dic.keys()
values = dic.values()
items = dic.items()
print(keys)
print(values)
print(items)
dic.pop('M')
print(items)Output:
dict_keys([‘M’, ‘o’, ‘m’, ‘y’, ‘e’, ‘u’])
dict_values([0, 0, 0, 0, 0, 0])
dict_items([(‘M’, 0), (‘o’, 0), (‘m’, 0), (‘y’, 0), (‘e’, 0), (‘u’, 0)])
dict_items([(‘o’, 0), (‘m’, 0), (‘y’, 0), (‘e’, 0), (‘u’, 0)])
4. 嵌套字典
1
2
3
4 a = {"Momoyeyu":{"Chinese":60, "Math":50, "English":40}}
b = {"Momoyeyu":[60, 50, 40]}
print(a["Momoyeyu"]["Math"], end=" ")
print(a["Momoyeyu"][1])Output:
50 50