做快递网站制作,青岛网站设计品牌企业,深圳市住房和建设局网站变更,大数据网站开发Python 中字典#xff08;dict#xff09;是一种无序的、可变的序列#xff0c;它的元素以“键值对#xff08;key-value#xff09;”的形式存储。相对地#xff0c;列表#xff08;list#xff09;和元组#xff08;tuple#xff09;都是有序的序列#xff0c;它们…Python 中字典dict是一种无序的、可变的序列它的元素以“键值对key-value”的形式存储。相对地列表list和元组tuple都是有序的序列它们的元素在底层是挨着存放的。字典中习惯将各元素对应的索引称为键key各个键对应的元素称为值value键及其关联的值称为“键值对”。
1 字典的创建
1.1 通过大括号 {} 创建字典。
由于字典中每个元素都包含两部分分别是键key和值value因此在创建字典时键和值之间使用冒号 : 分隔相邻元素之间使用逗号 , 分隔所有元素放在大括号 {} 中格式为
dictname {key:value1, key2:value2, ..., keyn:valuen}其中 dictname 表示字典变量名keyn : valuen 表示各个元素的键值对字典的键可以是整数、字符串或者元组只要符合唯一和不可变的特性就行字典的值可以是 Python 支持的任意数据类型。
dict1 {年龄: 20, 姓名: 小明}
print(type(dict1))
dict2 {1: 20, 2: 30, 3: 六十}
print(type(dict2))
dict3 {1: (1, 2, 3), 2: [1, 2, 3], 3: 六十}
print(type(dict3))class dict
class dict
class dict1.2 通过 fromkeys 函数创建字典
Python 中可以使用 dict 字典类型提供的 fromkeys 函数创建带有默认值的字典语法格式为
dictname dict.fromkeys(listvalueNone)其中list 参数表示字典中所有键的列表listvalue 参数表示默认值如果不写则为空值 None。
list1 [语文, 数学, 英语]
dict1 dict.fromkeys(list1)
print(dict1)
dict2 dict.fromkeys(list1, 90)
print(dict2){语文: None, 数学: None, 英语: None}
{语文: 90, 数学: 90, 英语: 90}1.3 通过 dict 函数创建字典
向 dict 函数传入列表或元组而它们中的元素又各自是包含 2 个元素的列表或元组其中第一个元素作为键第二个元素作为值
demo1 [(two, 2), (one, 1), (three, 3)]
demo2 [[two, 2], [one, 1], [three, 3]]
print(dict(demo1))
print(dict(demo2)){two: 2, one: 1, three: 3}
{two: 2, one: 1, three: 3}通过应用 dict 函数和 zip 函数可将两个列表、元组、集合、字符串甚至还可以将 range 区间转换为对应的字典语法格式为dictname dict(zip(keys, values) )
keys1 [two, one, three]
values1 (2, 1, 3)
values2 range(0, 3)
dict1 dict(zip(keys1, values1))
dict2 dict(zip(keys1, values2))
print(dict1)
print(dict2){two: 2, one: 1, three: 3}
{two: 0, one: 1, three: 2}2 字典的访问
2.1 直接访问
因为字典中的元素是无序的每个元素的位置都不固定所以字典也不能像列表和元组那样采用切片的方式一次性访问多个元素。字典可以通过键来直接访问对应的值语法格式为dictname[key]其中dictname 表示字典变量的名字key 表示键名注意键必须是存在的否则会抛出异常。
2.2 通过 get 函数访问
Python 更推荐使用 dict 类型提供的 get 函数来获取指定键对应的值。当指定的键不存在时get 函数不会抛出异常语法格式为dictname.get(key_obj, defaultvalue)其中dictname 表示字典变量的名字key_obj 表示指定的键defaultvalue 用于指定要查询的键不存在时此方法返回的默认值如果不手动指定会返回 None。
dict1 {语文: 85, 数学: 96, 英语: 92}
print(dict1[语文])
print(dict1[物理])
print(dict1.get(语文))
print(dict1.get(物理))
print(dict1.get(物理, 值不存在))85
Traceback (most recent call last):File D:\code\pythonDev\test\main.py, line 3, in moduleprint(dict1[物理])
KeyError: 物理2.3 通过 setdefault 函数访问
Python 字典中 setdefault 函数可以使用指定的键返回项目的值和 get 函数类似, 如果键不存在于字典中将会添加键并将值设为默认语法格式为dictname.setdefault(key_obj, defaultvalue)
其中 dictname 表示字典名称key_obj 表示目标键值对对应的键defaultvalue 表示默认值可以不写不写的话是 None当指定的 key_obj 不存在时setdefault 函数会先为这个不存在的 key_obj 设置一个默认的 defaultvalue然后再返回 defaultvalue如果该 key_obj 存在那么直接返回该 key_obj 对应的 value。
dict1 {one: 100, two: 200, three: [100, 200, 300]}
print(dict1.setdefault(one))
dict2 {one: 100, two: 200, three: [100, 200, 300]}
print(dict2.setdefault(one, 0))
dict3 {one: 100, two: 200, three: [100, 200, 300]}
print(dict3.setdefault(four))
dict4 {one: 100, two: 200, three: [100, 200, 300]}
print(dict4.setdefault(four, 400))
print(dict4.get(four))100
100
None
400
4002.4 字典中键值对的添加
为字典添加新的键值直接给不存在的 key 赋值即可语法格式为
dictname[key_new] value_new其中dictname 表示字典名称key_new 表示新的键value_new 表示新的值只要是 Python 支持的数据类型都可以。
dict1 {语文: 85, 数学: 96, 英语: 92}
dict1[物理] 86
print(dict1){语文: 85, 数学: 96, 英语: 92, 物理: 86}2.5 字典中键值对的修改
Python 字典中键key的名字不能被修改只能修改值value。字典中各元素的键必须是唯一的因此如果新添加元素的键与已存在元素的键相同那么键所对应的值就会被新的值替换掉以此达到修改元素值的目的。
dict1 {语文: 85, 数学: 96, 英语: 92}
dict1[数学] 100
print(dict1)
# {语文: 85, 数学: 100, 英语: 92}2.6 字典的删除和字典中键值对的删除
字典的删除和删除列表、元组一样手动删除字典也可以使用 del 语句语法格式为del dictname其中dictname 表示要删除的字典名称。
dict1 {语文: 85, 数学: 96, 英语: 92}
del dict1
print(dict1)Traceback (most recent call last):File D:\code\pythonDev\test\main.py, line 3, in moduleprint(dict1)
NameError: name dict1 is not defined字典中键值对的删除
del 语句
如果要删除字典中的键值对还是可以使用 del 语句语法格式为del dictname[key_obj]其中dictname 表示字典名称key_obj 表示要删除的目标键值对的键名。
dict1 {语文: 85, 数学: 96, 英语: 92}
del dict1[语文]
print(dict1)
# {数学: 96, 英语: 92}
pop 函数
pop 函数用来删除指定的键值对语法格式为dictname.pop(key_obj)其中dictname 表示字典名key_obj 表示字典中要删除的指定键值对的键名。
popitem 函数
popitem 函数用来删除字典中最后一个键值对语法格式为dictname.popitem()其中dictname 表示字典名。
dict1 {one: 100, two: 200, three: [100, 200, 300]}
dict1.pop(one)
print(dict1)
dict2 {one: 100, two: 200, three: [100, 200, 300]}
dict2.popitem()
print(dict2){two: 200, three: [100, 200, 300]}
{one: 100, two: 200}2.7 判断字典中是否存在指定键值对
如果要判断字典中是否存在指定键值对首先应判断字典中是否有对应的键。判断字典是否包含指定键值对的键可以使用 in 或 not in 运算符需要指出的是对于 dict 而言in 或 not in 运算符都是基于 key 来判断的语法格式为key_obj in dictname其中key_obj 表示要查找的目标键值对的键名dictname 表示字典名如果存在返回 True如果不存在返回 False。
dict1 {语文: 85, 数学: 96, 英语: 92}
print(语文 in dict1)
print(物理 in dict1)True
False2.8 字典的遍历
通过 for 循环遍历
for 循环有两种方法可以遍历字典中的键值对语法格式为
# 第一种方法
for key in dictname:print(key, dictname[key])
# 第二种方法
for key,value in dictname.items():print(key, value)其中dictname 表示字典名key 表示列表中键值对对应的键value 表示列表中键值对对应的值。
dict1 {语文: 85, 数学: 96, 英语: 92}
for key in dict1:print(key, dict1[key])
for key, value in dict1.items():print(key, value)语文 85
数学 96
英语 92通过 keys 函数遍历
keys 函数用于返回字典中的所有键key语法格式为dictname.keys()
通过 values 函数遍历
values 函数用于返回字典中所有键对应的值value语法格式为dictname.values()
通过 items 函数遍历
items 函数用于返回字典中所有的键值对key-value语法格式为dictname.items()
2.9 字典的复制拷贝
copy 函数返回一个字典的拷贝也即返回一个具有相同键值对的新字典语法格式为dictname.copy()
a {one: 100, two: 200, three: [100, 200, 300]}
b a.copy()
print(b)
# {one: 100, two: 200, three: [100, 200, 300]}注意copy 函数所遵循的拷贝原理既有深拷贝也有浅拷贝。拿拷贝字典 a 为例copy 函数只会对最表层的键值对进行深拷贝也就是说它会再申请一块内存用来存放 {‘one’: 1, ‘two’: 2, ‘three’: []}而对于某些列表类型的值来说此方法对其做的是浅拷贝也就是说b 中的 [100, 200, 300] 的值不是自己独有而是和 a 共有。
a {one: 100, two: 200, three: [100, 200, 300]}
b a.copy()
# 向 a 中添加新键值对由于b已经提前将 a 所有键值对都深拷贝过来因此 a 添加新键值对不会影响 b。
a[four] 100
print(a)
print(b)
# 由于 b 和 a 共享[100,200,300]浅拷贝因此移除 a 中列表中的元素也会影响 b。
a[three].remove(100)
print(a)
print(b){one: 100, two: 200, three: [100, 200, 300], four: 100}
{one: 100, two: 200, three: [100, 200, 300]}
{one: 100, two: 200, three: [200, 300], four: 100}
{one: 100, two: 200, three: [200, 300]}2.10 字典的更新
update 函数可以使用一个字典所包含的键值对来更新己有的字典在执行 update 函数时如果被更新的字典中己包含对应的键值对那么原 value 会被覆盖如果被更新的字典中不包含对应的键值对则该键值对被添加进去语法格式为dictname.update(dict_obj)其中dict_obj 表示包含需要更新键值对的字典dictname 表示需要被更新的字典。
dict1 {one: 100, two: 200, three: [100, 200, 300]}
dict2 {one: 100, two: 300, four: 400}
dict1.update(dict2)
print(dict1)
# {one: 100, two: 300, three: [100, 200, 300], four: 400}