1.字典的定义
(1)特点
- 是一个无序的集合,不支持索引访问以及切片操作
- 每一个元素由两部分,键、值组成
- 用大括号来表示这一数据类型
- 可以存放任意的对象类型
(2)创建
#定义空字典
a={}
b=dict()
#定义普通字典(任意对象类型都可以)
c={"yx": 12, "xz": 23, "zwa": 35}
- 注意1 创建字典时的键名不允许重复(若有重复,只会自动保留一个,其他的则被忽略)
dt={"yx": 12, "xz": 23, "zwa": 35, "yx": 37}
dt
输出结果为:
{'yx': 37, 'xz': 23, 'zwa': 35} #重复定义的第一个键值对被忽略
- 注意2 键与值的数据类型,键(不可变数据类型),值(任意数据类型)
dt={"yx": 12, "xz": 23, [11, 22]: 35} #列表是可变数据类型,所以报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
- 不可变数据类型:当改变某个值的时候,它的内存地址也会跟着改变,称之为不可变数据类型
x=2 #不可变数据类型的示例
id(x)
x=3
id(x)
140713320105664 #内存地址发生了改变
140713320105696
2.字典的访问
- 访问格式:字典名称[键名]
c["yx"]
c["zwa"]
c["kk"] #访问一个不存在的键名
输出结果为:
12
35
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'kk'
3.字典的遍历
(1)遍历键名
- 普通遍历
dt={"yx": 12, "xz": 23, "zwa": 35}
for i in dt:
print(i)
输出结果为:
yx
xz
zwa
- 用方法遍历
for i in dt.keys():
print(i)
输出结果为:
yx
xz
zwa
(2)遍历值
- 普通遍历
for i in dt():
print(dt[i])
输出结果为:
12
23
35
- 用方法遍历
for i in dt.values():
print(i)
输出结果为:
12
23
35
(3)遍历键值对
- 用方法遍历1
for i in dt.items():
print(i)
输出结果为:
('yx', 12)
('xz', 23)
('zwa', 35)
- 用方法遍历2
for k,v in dt.items():
print(k,v)
输出结果为:
yx 12
xz 23
zwa 35
4.字典方法
方法 | 功能 |
---|---|
dict.clear() | 删除字典内所有元素 |
dict.copy() | 返回一个字典的浅复制 |
dict.keys() | 以列表返回一个字典所有的键 |
dict.values() | 以列表返回字典中的所有值 |
dict.items() | 以列表返回可遍历的(键,值)元组数组 |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
dict.pop(key[,default]) | 删除字典给定键key所对应的值,返回值为被删除的值。key必须指定。否则返回default值 |
dict.popitem() | 随机返回并端除字典中的一对键和值。返回的是元组类型 |
dict.get(key,default=None) | 返回指定键的值,如果值不在字典中返回default值 |
dict.fromkeys(seq,val) | 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
dict.setdefault(key,default=None) | 和get()类似,如果键不存字典中,将添加键并将值设为default |
测试用例(1)
dt={"yx": 12, "xz": 23, "zwa": 35}
dt.clear()
dt
{}
测试用例(2)
dt={"yx": 12, "xz": 23, "zwa": 35}
dt.copy()
{"yx": 12, "xz": 23, "zwa": 35}
测试用例(3)
dt.keys()
dict_keys(['yx', 'xz', 'zwa'])
测试用例(4)
dt.values()
dict_values([12, 23, 35])
测试用例(5)
dt.items()
dict_items([('yx', 12), ('xz', 23), ('zwa', 35)])
测试用例(6)
dt.update({55: 33, 99: 111})
dt
{'yx': 12, 'xz': 23, 'zwa': 35, 55: 33, 99: 111}
测试用例(7)
dt.pop(55)
dt
33
{'yx': 12, 'xz': 23, 'zwa': 35, 99: 111}
测试用例(8)
dt.popitem()
dt
(99, 111)
{'yx': 12, 'xz': 23, 'zwa': 35}
测试用例(9)
dt.get("yx")
dt.get(11, "aa") #若值不在字典,返回的default值可以自定义
dt.get(22) #也可以不定义default值,默认为None
12
'aa'
测试用例(10)
dict.fromkeys([11, 22], 100)
{11: 100, 22: 100}
测试用例(11)
dt.setdefault(66, 88)
dt
dt.setdefault(77)
dt
88
{'yx': 12, 'xz': 23, 'zwa': 35, 66: 88}
{'yx': 12, 'xz': 23, 'zwa': 35, 66: 88, 77: None}
- 注意1 del也可以进行删除操作
del dt[77] #删除元素
dt
del dt #删除字典
dt
输出结果为:
{'yx': 12, 'xz': 23, 'zwa': 35, 66: 88}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'dt' is not defined
- 注意2 也可通过 字典名[键名] 来直接修改字典中的元素
dt[99]=100 #当修改字典的值时,若指定的键名不存在,相当于在字典中添加这一元素
dt
dt[66]=77
dt
输出结果为:
{'yx': 12, 'xz': 23, 'zwa': 35, 66: 88, 99: 100}
{'yx': 12, 'xz': 23, 'zwa': 35, 66: 77, 99: 100}