python高阶(三)——字典学习
字典 dict
1. 字典是一种可变的容器,可以存储任意类型的数据
2. 字典中的每个数据都是用'键'(key) 进行索引,而不像序列可以用下标来进行索引
3. 字典的数据没有先后顺序关系,字典的存储是无序的
4. 字典中的数据以键(key)-值(value)对进行映射存储
5. 字典的键不能重复,且只能用不可变类型作为字典的键。
字典的字面值表示方式
用 {} 括起来,以冒号(:) 分隔键-值对, 各键值对用分号分隔开
创建空字典
d = {}
创建非空的字典
d = {'name': 'tarena', 'age': 15} d = {'姓名': '小张'} d = {1:'壹', 2:'贰'}
字典的构造函数 dict
dict() 创建一个空字典,等同于 {}
dict(iterable) 用可迭代对象初始化一个字典
dict(**kwargs) 关键字传参形式生成一个字典
d = dict() d = dict([('name', 'tarena'), ('age',15)]) d = dict(name='tarena', age=15)
什么叫可变类型什么叫不可变类型?
不可变类型
int,float,complex,bool,str,tuple,frozenset(固定集合), bytes(字节串)(后面会讲)
可变类型
list, dict, set(集合), bytearray(字节数组)
字典的键索引
用[] 运算符可以获取字典内'键'所对应的'值'
语法:字典[键]
#获取数据元素 d = dict(name='LeoLRH', age=15) print(d['age']) # 15 #添加/修改字典元素 #字典[键] = 表达式 d = {} d['name'] = 'LeoLRH' # 创建一个新的键值对 d['age'] = 15 # 创建键值对 d['age'] = 16 # 修改键值对
del 语句删除字典的元素
语法:del 字典[键]
d = {'name': 'china', 'pos': 'asia'} del d['pos'] print(d) del d['name'] print(d) # {}
字典的 in / not in 运算符
可以用 in 运算符来判断一个'键'是否存在于字典中,如果存在则返回True, 否则返回False
not in 与 in 返回值相反
d = {'a': 1, 'b': 2} 'a' in d # True 1 in d # False 100 not in d # True 2 not in d # True
字典的迭代访问
字典是可迭代对象,字典只能对键进行迭代访问
d = {'name': 'LeoLRH', (2002, 1, 1): '生日'} for x in d: print(x)
可以用于字典的内建函数
len(x) 返回字典键-值对的个数
max(x) 返回字典的键的最大值
min(x) 返回字典的键的最小值
sum(x) 返回字典所有键的和
any(x) 真值测试,只对键测试,如果其中一个键为True,结果为True
all(x) 真值测试,全部键为True时,结果才为True
字典的方法
# 练习: # 写程序,实现以下需求: # 将如下数据形成一个字典seasons # '键' '值' # 1 '春季有1,2,3月' # 2 '夏季有4,5,6月' # 3 '秋季有7,8,9月' # 4 '冬季有10,11,12月' # 让用户输入一个整数代表这个季度,打印这个季度的信息,如果用户输入的信息不在字典的键内,则打印信息不存在 seasons = {1: '春季有1,2,3月', 2: '夏季有4,5,6月', 3: '秋季有7,8,9月', 4: '冬季有10,11,12月' } n = int(input("请输入季度(1~4): ")) # 方法1 # if n in seasons: # print(seasons[n]) # else: # print("输入有误!") # 方法2 print(seasons.get(n, "输入有误!"))
# 练习: # 写程序,输入一段字符串,打印出这个字符串中出现过的字符及出现过的次数: # 如: # 输入: ABCDABCABA # 输出: # A : 4次 # C : 2次 # B : 3次 # D : 1次 # 注: 不要求打印的顺序 s = input("输入: ") # 方法1 # d = {} # 字典的键是出现的字符,字典的值是出现的次数 # for ch in s: # 把我有字符都取出一遍 # if ch not in d: # # 如果是第一次出现,则把ch作为键,把1作为值加入字典中 # d[ch] = 1 # else: # # 如果已经出现过,则把ch键所对应的值做 +1 操作 # d[ch] += 1 # # for k in d: # print(k, ":", d[k], '次') # 方法2: d = {} for ch in s: if ch not in d: # 把将一次出现的字符加入字典中 d[ch] = None for ch in d: print(ch, ":", s.count(ch), "次")
字典推导式
字典推导式是用可迭代对象依次生成字典内元素的表达式
语法:{键表达式 : 值表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注: []的内容代表可省略
d = {x : x**2 for x in range(10)}
# 练习: # 1. 有字符串列表如下: # L = ['LeoLRH', 'xiaozhang', 'xiaowang'] # 生成如下字典: # d = {'LeoLRH': 6, 'xiaozhang': 9, 'xiaowang': 8} # 注: 字典的值是键的长度 L = ['LeoLRH', 'xiaozhang', 'xiaowang'] d = {x : len(x) for x in L} print(d)
# 2. 编号列表如下: # Nos = [1001, 1002, 1003, 1004] # names = ['Tom', 'Jerry', 'Spike', 'Tyke'] # 生成用Nos数据为键,以names为值的字典,如下: # {1001: 'Tom', 1002: 'Jerry', ......} Nos = [1001, 1002, 1003, 1004] names = ['Tom', 'Jerry', 'Spike', 'Tyke'] # 方法1 # d = { Nos[i]: names[i] # for i in range(min(len(Nos), len(names)))} # 方法2: d = { x: names[Nos.index(x)] for x in Nos} print(d)
如需转载
请联系作者:qq:3336987685
微信:LeoLRH