字典 dict
什么是字典:
1. 字典是一种可变的容器,可以存储任意类型的数据
2. 字典中的每个数据都是用'键'(key)进行索引的,而不像序列可以用索引下标进行索引
3. 字典中的数据没有先后顺序关系,字典的存储是无序的
4. 字典中的数据以键-值对(key-value)对形式进行映射存储
5. 字典的键不能重复,且只能用不可变类型作为字典的键
字典的字面值表示方法:
以{} 括起来,以冒号(:) 分隔键-值对,各键值对用逗号分隔开
创建空字典:
d = {} # {} 表达式用来创建一个空的字典
创建非空字典:
d = {'name': 'Li', 'age': 35}
d = {'a': 100}
d = {'a': tuple("ABC")}
d = {'abc': list("ABC")}
d = {'a': {'b':100, 'c':200}}
d = {True:'真值', False: '假值', None:'空', 100:'一百'}
d = {(1970, 1, 1): '计算机元年'}
字典的构造函数 dict
dict() 创建一个空的字典,等同于{}
dict(iterable) 用可迭代对象创建一个新的字典
dict(**kwargs) 用关键字传参形式创建一个新的字典
示例:
d = dict()
d = dict([('name', 'tom'), ('age', 15)])
d = dict((['name', 'Li'], "AB"))
d = dict(name='eric', age=15)
字典的操作
字典的键索引
用[] 运算符可以获取字典内'键'对应的'值'
语法:
v = 字典[键]
示例:
d = {'name': 'tom', 'age': 15}
print(d['name'], '今年', d['age'], '岁')
添加/修改字典的元素
语法:
字典[键] = 表达式
示例:
d = {}
d['name'] = 'tom' #创建新的键'name'同时关联值
d['age'] = 15 # 创建键并绑定15
d['age'] = 16 # 修改原来的键'age',重新绑定为16
说明:
键不存在,创建键,并绑定值
键存在,修改键的绑定关系
删除字典元素 del语句
del 字典[键]
示例:
d = {1:'一', 'hello': 'world', False:'假值'}
del d['hello']
字典的 in / not in 运算符
in用来判断一个键是否存在于字典中,如果存在返回 True,否则返回False
not in 的返回结果与in 相反
示例:
d = {'name': '小张', 'age': 20}
'name' in d # True
'age' not in d # False
'小张' in d # False (只判断键,不判断值)
20 not in d # True
字典的迭代访问
字典是可迭代对象,字典只能对'键'进行访问
示例:
d= {'aaa': 111, 'bbb': 222, 'ccc': 333}
for k in d:
print(k)
可以用于字典的函数:
len(x) 返回字典的键值对个数
max(x) 返回字典键的最大值
min(x) 返回字典键的最小值
sum(x) 返回字典所有键的和
any(x) 真值测试,只对键进行测试
all(x) 真值测试,全部键为真值.结果才为True
示例:
d = {0: '零', 5:'伍', 8:'捌', 3:'叁'}
len(d) # 4
max(d) # 8
min(d) # 0
sum(d) # 16
any(d) # True
all(d) # False
字典的方法
方法名 说明
D.clear() 清空字典
D.pop(key) 移除键,同时返回此键对应的值
D.copy() 返回字典D的副本(浅拷贝)
D.update(D2) 将字典D2合并到D中,如果键相同,则此键的值取D2的值为为新值
D.get(key, default=None) 返回键key所对应的值,如果没有此键,则返回Default的值
D.keys() 返回可迭代的dict_keys集合对象
D.values() 返回可迭代的dict_value集合对象
D.items() 返回可迭代的dict_item对象
示例:
d = {1: 'One', 2: "Two"}
d2 = {2: '二', 3: '三'}
d3 = d.copy() # 复制
d3.pop(1) # d3 = {2: "Two"}
d.update(d2) # d = {1: 'One', 2: '二', 3: '三'}
d = {1: 'One', 2: '二', 3: '三'}
for k in d.keys():
print(k) # 1 2 3
for v in d.values():
print(v) # 'One' '二' '三'
for t in d.items():
print(t) # (1, 'One') (2, '二') (3, '三')
字典推导式
是用可迭代对象生成字典的表达式
语法:
{键表达式 : 值表达式 for 变量 in 可迭代对象[if 真值表达式]}
注: []表示其中的内容可省略
示例:
# 生成一个字典,键为数字 1 ~ 9,值为键的平方
d = {x : x ** 2 for x in range(1, 10)}
字典推导式练习:
1. 已知有如下字符串列表
L = ['name', 'xiaozhang', 'abc']
生成如下字典:
d = {'name': 6, 'xiaozhang': 9, 'abc': 3}
注: 字典的值为键的长度
2. 已知有如下两个列表:
nos = [1001, 1002, 1005, 1008]
names = ['Tom', 'Jerry', 'Spike', 'Tyke']
用上述两个列表生成如下字典:
{1001: 'Tom', 1002: 'Jerry', 1005: 'Spike', 1008: 'Tyke'}
字典推导式的嵌套等同于列表推导式的嵌套
字典 VS 列表
1. 都是可变对象
2. 索引方式,列表用整数索引,字典用键索引
3. 字典的插入,删除,修改的速度可能会快行列表(重要)
4. 列表的存储是有序的,字典的存储是无序的
课后习题:
1. 写一个程序模拟现实电子字典
1) 输入一些单词和解释,将单词作为键,将解释作用值,将这些数据输入到字典中,当输入空单词时结束输入
2) 输入要查找的词,给出该单词的解释.如果单词不存在则提示用户不存在该单词
2. 学生信息管理项目
输入任意个学生的姓名,年龄,成绩.每个学生的信息存入一个字典内,然后放入到列表中
(每个学生需要手动输入)
如:
请输入姓名: name1
请输入年龄: 20
请输入成绩: 99
请输入姓名: name2
请输入年龄: 30
请输入成绩: 88
请输入姓名: <回车> 结束输入
形成内部存储格式如下:
[{'name':'name1', 'age':20, 'score':99}, {'name':name2, 'age':30, 'score':88}]
1) 打印出存有学生信息的字典的列表
2) 按表格形式打印出学生信息:
+---------------+----------+----------+
| name | age | score |
+---------------+----------+----------+
| name1 | 20 | 99 |
| name2 | 30 | 88 |
+---------------+----------+----------+
想要看更多的课程请微信关注SkrEric的编程课堂