1. 字典的定义
字典是一个可变对象,它可以存储任意类型的对象。
字典元素由键值对组成,字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 。
其中键必须是唯一的,而值可以不唯一。值可以是任何数据类型,但键必须是不可变的,如字符串,数字或元组。
2. 字典的创建
格式:dict = {key1:value1, key2:value2, key3:value3}。
空字典(不包含任何键值对)由两个大括号组成,如{}。
dict1 = {} # 定义一个空字典
dict2 = {"name":"霜花似雪", "age":25, "height":171, "address":"广东深圳"}
也可以使用dict()函数来创建字典,dict()函数可以将序列转化为字典
例如:
student = [("小明", 100), ("小兰", 98), ("小张", 88)]
dict(student) => 结果:{"小明":100, "小兰":98, "小张":88 }
再例如:
dict(name="霜花似雪", age=25, address="广东深圳")
结果:{"name":"霜花似雪", "age":25, "address":"广东深圳"}
3. 字典的基本操作
(1)访问字典里的值
通过字典名[key]的方式来访问字典里的值,
例如:
user = {"name":"霜花似雪", "age":25, "height":171, "address":"广东深圳"}
user["name"] => 结果:霜花似雪
user["age"] => 结果:25
user["phone"] => 结果:报错,原因是键phone不存在
(2)修改或添加字典元素
通过给字典名[key]赋一个新值来修改字典;
向字典添加新的键值对来向字典添加元素;
例如:
user = {"name":"霜花似雪", "age":25, "height":171, "address":"广东深圳"}
user[name] = "东方不败" # 修改
user[age] = 30 # 修改
user[phone] = "18295514499" # 添加
(3)删除字典元素
这里的删除指的是显式删除,显式删除一个字典使用del命令来实现,使用del可以删除字典的某个元素,也可以删除整个字典。
user = {"name":"霜花似雪", "age":25, "height":171, "address":"广东深圳"}
del user["age"] # 删除字典中的age键值对
del user # 删除整个字典
4. 字典健的特性
(1)字典的键是唯一的,且是不可变对象,字典健可以是字符串,数字或元组。字典的值可以是任何对象(Python中一切皆对象),既可以是标准对象,也可以是用户定义的对象。
(2)在一个字典中,不允许同一个键出现两次。创建字典时,如果同一个键出现两次,后面的键值对会覆盖前面的。
(3)字典的键必须是不可变对象,可以是数字,字符串或元组,而不能是列表。
5. 字典方法
(1)len(dict) 用于获取字典的元素个数,换句话说是有几对键值对。
(2)str(dict) 用于将字典转化为字符串,以可以打印的字符串表示。
(3)type(dict) 用于返回输入的变量类型,如果变量是字典就返回字典类型。
6. 字典的格式化字符串
字典的格式化方式是在每个转换说明符中的%字符后面加上用圆括号括起来的键,再跟上其他说明元素。
例如:
user = {"name":"霜花似雪", "age":25, "height":171, "address":"广东深圳", "money": 123652562.7656256}
print("%(name)s" %user) => 结果: 霜花似雪
print("%(age)d" %user) => 结果: 25
print("%(money).4f" %user) => 结果: 123652562.7656
7. 字典与列表的区别
当字典和列表中的数据量很大时,list的查询效率会大大下降,而字典无论有多大,查询速度都会很快。
字典的实现原理与查字典是一样的,查询速度很快。
字典的特点是:
(1)查找和插入的速度极快,不会因为随着key的增加而变慢。
(2)字典需要占用大量的内存,内存浪费多。
列表的特点是:
(1)查找和插入时间随着元素的增加而增加。
(2)列表占用的空间较小,内存浪费少。
字典使用空间换时间,字典内部存放的顺序和键放入的顺序没有关系。
代码示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#!/usr/bin/python3 # -*- coding: utf-8 -*- # author : liuhefei # Time : 2019/11/30 # desc: Python数据类型之字典 if __name__ = = "__main__" : # 创建字典 dict1 = {} # 创建一个空字典 print ( "dict1 = " , dict1) dict2 = { "name" : "霜花似雪" , "age" : 25 , "height" : 171 , "address" : "广东深圳" } print ( "dict2 = " , dict2) # 使用dict()函数创建字典 student = [( "雪儿" , 88 ), ( "梦梦" , 99 ), ( "婷婷" , 90 ), ( "姗姗" , 86 ), ( "兰兰" , 93 )] stu = dict (student) print ( "stu = " , stu) user = dict (name = "霜花似雪" , age = 25 , height = 171 , address = "广东深圳" ) print ( "user = " , user) # 字典的基本操作 # 访问字典里的值 product = { "name" : "华为荣耀20" , "stock" : 100 , "price" : 3999 , "address" : "广东东莞" } print ( "product = " , product) print ( "product['name'] = " , product[ 'name' ]) print ( "product['price'] = " , product[ 'price' ]) #print("product['color'] = ", product['color']) # 将会报错,键不存在 # 修改或添加字典元素 product[ 'name' ] = "华为荣耀20 Pro" product[ 'price' ] = 4998 print ( "product = " , product) product[ 'color' ] = [ "幻影黑" , "幻影白" , "翡翠蓝" ] product[ 'size' ] = [( 478 , 680 ), ( 536 , 754 )] print ( "product = " , product) # 删除字典元素 del product[ 'address' ] # 删除字典的address键值对 print ( "product = " , product) phone = product print ( "phone = " , phone) del phone # 删除整个字典 print ( "product = " , product) # 字典健的特性 mi = { "name" : "小米C9" , "price" : "1899" , "name" : "小米CC9" , "price" : 2999 } print ( "mi = " , mi) number = { 100 : "10*10" , "沉鱼落雁" : "闭月羞花" , ( "三国" , "貂蝉" ): "美女" } print ( "number = " , number) # 字典方法 # len(dict) print ( "len(mi) = " , len (mi)) print ( "len(number) = " , len (number)) # str(dict) print ( "str(mi) = " , str (mi)) print ( "str(number) = " , str (number)) # type(dict) print ( "type(mi) = " , type (mi)) print ( "type(number) = " , type (number)) # 字典格式化 user = { "name" : "霜花似雪" , "age" : 25 , "height" : 171 , "address" : "广东深圳" , "money" : 123652562.7656256 } print ( "name = %(name)s" % user) print ( "age = %(age)d" % user) print ( "money = %(money).4f" % user) |
字典函数:
1. dict.clear():该方法用于删除字典内的所有元素(清空字典),没有返回值(返回值为None)
2. dict.copy():(复制)该函数用于返回一个具有相同键值对的新字典,是浅复制,因为值本身是相同的,而不是副本。
3. dict.fromkeys(seq[, value]): 该函数用于创建一个新字典,以序列seq中的元素做字典的键,value为字典所有键对应的初始值。
参数:dict表示指定字典;seq表示字典键值列表;value表示可选参数,用于设置键序列(seq)的值。
该方法返回一个列表。
4. dict.get(key, default=None): 该函数用于获取指定键key的值,如果值不在字典中,就返回默认值。
参数:dict表示指定字典;key表示字典中要查找的键;default用于指定默认值,当键的值不存在时返回该默认值。
该方法返回结果为指定键的值,如果值不在字典中,就返回默认值None。
5. key in dict : in操作用于判断键key是否存在于字典dict中,如果键key在字典中,则返回True,不在字典中,则返回False。
6. dict.items(): 该函数以列表返回可遍历的(键,值)元组数组。
7. dict.keys(): 该函数以列表返回一个字典的所有键
8. dict.setdefault(key, default=None): 该函数用于获取与给定键相关联的值,如果字典中不存在键key,就会添加键并将值设置为默认值。
参数:dict为指定的字典;key表示查找的键;default表示键不存在时设置的默认值。
该方法没有任何返回值。
9. dict.update(dict2): (更新或合并)该函数用于把字典dict2中的键值对更新到字典dict中。
参数:dict表示指定的字典;dict2表示要添加到指定字典dict中的字典。
该方法没有任何返回值。
10. dict.values(): 该函数以列表的形式返回字典中的所有值。它与返回键的列表不同,返回的列表中可以包含重复的值。
返回结果为字典中的所有值。
11. pop(key[, default]): 该函数用于删除字典给定键key所对应的值,返回值为被删除的值。key值必须给出,否则返回default值。
参数:key要删除的键值;default如果没有key,返回default值。
12. popitem(): 该函数用于随机返回被删除字典中的最后一对键和值。如果字典为空,却调用了此方法,就报异常KeyError错误。
返回一个键值对(key,value)形式,按照后进先出的顺序规则,即最末尾的键值对。
代码示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#!/usr/bin/python3 # -*- coding: utf-8 -*- # author : liuhefei # Time : 2019/11/30 # desc: 字典函数 if __name__ = = "__main__" : dict1 = { "name" : "霜花似雪" , "age" : 25 , "height" : 171 , "address" : "广东深圳" } product = { "name" : "华为荣耀20" , "stock" : 100 , "price" : 3999 , "address" : "广东东莞" , "color" : [ "幻影黑" , "幻影白" , "翡翠蓝" ]} number = { 100 : "10*10" , "沉鱼落雁" : "闭月羞花" , ( "三国" , "貂蝉" ): "美女" } # dict.copy() dict2 = dict1.copy() print ( "dict2 = " , dict2) product1 = product.copy() print ( "product1 = " , product1) # dict.fromkeys(seq[, value]) dict3 = {} seq = ( "北京" , "上海" , "广州" , "深圳" ) city = dict3.fromkeys(seq) print ( "city = %s" % city) city1 = dict3.fromkeys(seq, 10000 ) print ( "city1 = %s" % city1) # dict.get(key, default=None) print ( "dict1.get('name') = " , dict1.get( 'name' )) print ( "dict1.get('weight') = " , dict1.get( 'weight' )) print ( "product.get('color') = " , product.get( 'color' )) print ( "product.get('kg', 0.67) = " , product.get( 'kg' , 0.67 )) # key in dict print ( "(100 in number) = " , 100 in number) print ( "('color' in product) = " , 'color' in product) print ( "('沉鱼落雁' 在字典number中) = %s" % ( '沉鱼落雁' in number)) # dict.items() print ( "dict1.items() = " , dict1.items()) print ( "product.items() = " , product.items()) print ( "number.items() = %s" % number.items()) # dict.keys() print ( "dict1.keys() = " , dict1.keys()) print ( "product.keys() = " , product.keys()) print ( "number.keys() = %s" % number.keys()) # dict,values() print ( "dict1.values() = " , dict1.values()) print ( "product.values() = " , product.values()) print ( "number.values() = %s" % number.values()) # dict.setdefault() print ( "dict1.setdefault('name') = " , dict1.setdefault( 'name' )) print ( "dict1.setdefault('name', '豆豆') = " , dict1.setdefault( 'name' , '豆豆' )) print ( "product.setdefault('send', '顺丰快递') = " , product.setdefault( 'send' , "顺丰快递" )) print ( "product = " , product) # dict.update(dict2) girl = { "姗姗" : "A罩杯" , "婷婷" : "B罩杯" , "梦梦" : "C罩杯" } girl1 = { "雨婷" : "B罩杯" , "兰婷" : "C罩杯" , "梦婷" : "B罩杯" } girlAll = girl.update(girl1) print ( "girlAll = " , girlAll) # dict.pop(key[, default) print ( "dict1.pop('height') = " , dict1.pop( 'height' )) # 如果要删除的key不存在,一定要指定默认值,否则会报错 print ( "dict1.pop('weight', 74) = " , dict1.pop( 'weight' , 74 )) print ( "number.pop(100) = " , number.pop( 100 )) # dict.popitem() print ( "dict1.popitem() = " , dict1.popitem()) print ( "product.popitem() = " , product.popitem()) print ( "number.popitem() = " , number.popitem()) # dict.clear() print ( "dict2.clear() = " , dict2.clear()) print ( "product1.clear() = " , product1.clear()) |
结束语:路是自己选的,后悔的话,也只能往自己的肚子里咽。