Python3 数据类型-字典
字典是一种可变数据类型,且可存储任意类型对象。
字典使用大括号"{}"括起来,由键(key)和值(values)组成,键只能使用不可变类型定义,值可以使用可变类型{'键':'值'}
一 创建
实例(Python3.0+):
1
2
3
4
5
6
7
8
|
dic = { 'name' : 'makes' , 'age' : '30' , 'hobby' : 'gril' , 'is_handsome' : True } print (dic[ 'name' ]) #makes dic1 = { 1 : 'makes' , 'hobby' :{ 'age' : 35 , 'gril_name' : 'wanglk' }, 'age' : 30 } print (dic1[ 'hobby' ]) #{'gril_name': 'wanglk', 'age': 35} dic2 = dict ((( 'name' , 'makes' ),( 'age' , 30 ))) print (dic2) #{'name': 'makes', 'age': 30} |
二 修改
实例(Python3.0+):直接修改
1
2
3
4
5
6
7
|
dict = { 'Name' : 'Runoob' , 'Age' : 7 , 'Class' : 'First' } dict [ 'Age' ] = 8 ; # 更新 Age dict [ 'School' ] = "清华大学" # 添加信息 print ( "dict['Age']: " , dict [ 'Age' ]) print ( "dict['School']: " , dict [ 'School' ]) |
dict.setdefault
- 键存在,不改动,返回字典中相应的值
- 键不存在,在字典中添加相应的键值对,并返回相应的值
实例(Python3.0+):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
dic = { 'name' : 'makes' , 'age' : '30' , 'hobby' : 'gril' , 'is_handsome' : True } #键存在,不改动,返回字典中相应的值 dic.setdefault( 'age' , 35 ) ret = dic.setdefault( 'age' , 35 ) #有返回值 print (ret) #30 print (dic) #{'name': 'makes', 'age': '30', 'is_handsome': True, 'hobby': 'gril'} #键不存在,在字典中添加相应的键值对,并返回相应的值 dic.setdefault( 'salary' , 10000 ) ret = dic.setdefault( 'salary' , '10000' ) print (dic) #{'name': 'makes', 'hobby': 'gril', 'salary': 10000, 'age': '30', 'is_handsome': True} print (ret) #10000 |
三 查
dict.keys()
- 以列表的方式返回字典中的所有键(keys)
实例(Python3.0+):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
dic1 = { 'age' : 19 , 'name' : 'lvcm' , 'hobby' : 'study' } print (dic1[ 'age' ]) #19 print (dic1.keys()) #查看字典中的所有键,dict_keys(['age', 'hobby', 'name']) print ( type (dic1.keys())) #<class 'dict_keys'> print ( list (dic1.keys())) #['name', 'age', 'hobby'] dic2 = { 'name' : 'makes' , 'age' :[ '123' , '345' ], 'salary' : 20000 } print ( 'age的值为:' ,dic2[ 'age' ][ 1 ]) #字典中的值为列表时,可以使用dic.[keys][索引]方式查看 #age的值为: 345 |
dict.values()
- 以列表的方式返回字典中的所有值(values)
实例(Python3.0+):
1
2
3
4
5
6
|
dic1 = { 'age' : 19 , 'name' : 'makes' , 'hobby' : 'study' } print (dic1.values()) #dict_values(['makes', 19, 'study']) print ( list (dic1.values())) #['study', 19, 'makes'] |
四 更新
dict.update(dict1)
- 把字典dict1的键/值对更新到dict里
- 当两个字典中的键不同时,把dict1的键值插入到dict中
- 当两个字典中存在相同键时,dict1覆盖dict的键值
实例(Python3.0+):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 当两个字典完全不相同时 dic1 = { 'name' : 'lvcm' , 'age' : 19 } dic2 = { 'hobby' : 'girl' , 'salary' : 10000 } dic1.update(dic2) print (dic1) # dic1--> {'hobby': 'girl', 'age': 19, 'salary': 10000, 'name': 'lvcm'} print (dic2) # dic2 --> {'hobby': 'girl', 'salary': 10000} # 当两个字典存在相同键时,会覆盖前面的键值 dic1 = { 'name' : 'lvcm' , 'age' : 19 } dic2 = { 'hobby' : 'girl' , 'salary' : 10000 , 'name' : '1111' } dic1.update(dic2) # dic1 --> {'salary': 10000, 'age': 19, 'hobby': 'girl', 'name': '1111'} print (dic1) # dic2 --> {'salary': 10000, 'hobby': 'girl', 'name': '1111'} print (dic2) |
五 删除
del dict[keys]
- 删除字典中的某个键值对
- 没有返回值
实例(Python3.0+):
1
2
3
4
|
dic1 = { "name" : "makes" , "age" : 19 , "salary" : 10000 } del dic1[ "name" ] print (dic1) |
del dict
- 删除整个字典
实例(Python3.0+):
1
2
3
4
5
|
dic1 = { "name" : "makes" , "age" : 19 , "salary" : 10000 } del dic1 print (dic1) #NameError: name 'dic1' is not defined(字典已删除,所以报错dict1未定义) |
dict.clear()
- 清空字典
实例(Python3.0+):
1
2
3
4
5
|
dic1 = { "name" : "makes" , "age" : 19 , "salary" : 10000 } dic.clear() print (dic1) # {} |
dict.popitem()
- 随机删除字典中的一组键值对
- 有返回值,以元祖方式返回
- 应用不广泛
实例(Python3.0+):
1
2
3
4
5
6
7
|
dict1 = { "name" : "makes" , "age" : 19 , "salary" : 10000 } dict2 = dict1.popitem() print (dict1) #{'age': 19, 'salary': 10000} print (dict2) #('name', 'makes') |
六 字典排序
sorted()
实例(Python3.0+):
1
2
3
4
5
6
|
dic6 = { 2 : 111 , 3 : 222 , 4 : 333 } # 以键来进行排序 print ( sorted (dic6.items())) # 以值进行排序 print ( sorted (dic6.values())) |
七 遍历
实例(Python3.0+):
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
|
dic7 = { 'name' : 'makes' , 'age' : 19 } print ( 'dic7 items:' ,dic7.items()) #以列表返回可遍历的(键, 值) 元组数组 #dic7 items: dict_items([('name', 'lvcm'), ('age', 19)]) for key in dic7: print (key) """ 针对键进行遍历,也可如下写法: for key in dic7.keys(): print(key) name age """ for values in dic7.values(): print (values) """ 针对值进行遍历 19 lvcm """ for i in dic7: print (i,dic7[i]) """ 针对键和值组合遍历,推荐使用 name makes age 19 """ for i,v in dic7.items(): print (i,v) """ 针对键和值组合遍历 age 19 name makes """ |
八 其它操作及方法
dict.fromkeys()
- 初始化字典时使用
实例1(Python3.0+):
1
2
3
4
5
6
|
dic5 = dict .fromkeys([ 'host1' , 'host2' , 'host3' ], 'test' ) print (dic5) # {'host2': 'test', 'host1': 'test', 'host3': 'test'} dic5 = dict .fromkeys([ 'host1' , 'host2' , 'host3' ],[ 'test' , 'test1' ]) print (dic5) #{'host3': ['test', 'test1'], 'host2': ['test', 'test1'], 'host1': ['test', 'test1']} |
实例2(Python3.0+):
1
2
3
4
5
6
|
dic5 = dict .fromkeys([ 'host1' , 'host2' , 'host3' ],[ 'test' , 'test1' ]) dic5[ 'host1' ][ 1 ] = 'test3' print (dic5) # {'host1': ['test', 'test3'], 'host3': ['test', 'test3'], 'host2': ['test', 'test3']} # 想法是把host1中的test1修改成test3,但是结果却修改了全部,此法慎用 |
字典嵌套
实例(Python3.0+):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
dic1 = { '欧美' :{ 'www.baidu.com' :[ '免费的' , '质量一般' ]}, '日韩' :{ 'www.runoob.com' :[ '收费的' , '质量标清' ]}, '国产' :{ 'www.sina.com.cn' :[ '免费的' , '高清' ]}, '三级片' :{ 'www.1024.com' :[ '免费的' , '下载速度慢' ]}, '四级片' :{ 'www.bokeyuan.com' :[ '收费的' , '无码' ]}, } print (dic1) #{'欧美': {'www.baidu.com': ['免费的', '质量一般']}, '国产': {'www.sina.com.cn': ['免费的', '高清']}, '日韩': {'www.runoob.com': ['收费的', '质量标清']}, '三级片': {'www.1024.com': ['免费的', '下载速度慢']}, '四级片': {'www.bokeyuan.com': ['收费的', '无码']}} |
九 函数
len()
- 计算字典元素个数,即键的总数。
实例(Python3.0+):
1
2
3
|
dict = { 'Name' : 'Runoob' , 'Age' : 7 , 'Class' : 'First' } print ( len ( dict )) #3 |
type(variable)
- 返回输入的变量类型,如果变量是字典就返回字典类型
实例(Python3.0+):
1
2
3
|
dict = { 'Name' : 'Runoob' , 'Age' : 7 , 'Class' : 'First' } print ( type ( dict )) #<class 'dict'> |
str(dict)
- 输出字典,以可打印的字符串表示
实例(Python3.0+):
1
2
3
|
dict = { 'Name' : 'Runoob' , 'Age' : 7 , 'Class' : 'First' } print ( str ( dict )) #"{'Name': 'Runoob', 'Class': 'First', 'Age': 7}" |