字典 (dict)
1.声明一个字典
(1)字典也是一种容器类型的数据类型(序列),存的数据是以键值对的形式出现,字典中的元素全部都是键值对
(2)字典是可变的(增删改),但是无序的(不能使用下标)
(3)键值对:键:值(key:value)
(4)键值对中key是形式,值才是真正要存的内容
(5) 键值对的键是唯一的,不然后面的会覆盖前面的
(6) 键:理论上可以是任何不可变的数据类型,但是实际开发的时候,一般使用字符串作为key
(7) 值:可以是任意数据类型数据
dict1={} #创建一个空字典
print(type(dict1)) #<class 'dict'>
dict2={'a':1,'b':2,1:100,('a',1):'abc'} #列表不可作为字典的键,但可以作为值
print(dict2) #{'a': 1, 'b': 2, 1: 100, ('a', 1): 'abc'}
(1)将其他的类型,转换成字典
dict3=dict([(1,2),(3,4)])
#数字,字符串,纯列表不可以转为字典,但是,列表中的元素是两位元祖
print(dict3) #{1: 2, 3: 4}
dict4={'a':1,'b':2,'a':'123'} #键应是唯一的,不然被覆盖
print(dict4) #{'a': '123', 'b': 2}
2、查(获取字典元素的值) (2种)
注意:确定key存在用1([])语法获取值,不确定key值是否存在才用2(get)去获取值
(1)字典获取元素的值是通过key来获取的
字典[key]
person={'name':'小子','age':18,'face':90}
print(person['name']) #小子
# print(person['aa']) #KeyError: 'aa' (如果key不存在,会报错)
(2)字典.get(key)
print(person['aaa']) #如果key不存在,返回None
3.增加元素、修改元素
通过key获取字典元素,然后赋值,当key存在的时候就修改元素的值,不存在的时候就给字典添加键值对
person['height']=1.8
print(person) #{'name': '小子', 'age': 18, 'face': 90, 'height': 1.8}
person['age']=20
print(person) #{'name': '小子', 'age': 20, 'face': 90, 'height': 1.8}
4.删除键值对(2种)
(1)del
del 字典 --->删除整个字典
del 字典[key] --->删除指定键值对 (key不存在会报错)
del person['face']
print(person) #{'name': '小子', 'age': 20, 'height': 1.8}
# del person['aaa']
# print(person) #key如果不存在还是报错
(2)pop
字典.pop(key) ---> 会返回被删除的键值对对应的值
age=person.pop('age')
print(person,age) #{'name': '小子', 'height': 1.8} 20
5.相关的数组属性
(1)字典.keys():获取字典所有的key,返回值的类型是dict_keys,但是可以把它当成列表来使用
(2)字典.values():获取字典所有的值(value)
(3)字典.items:将字典中所有的键值对转换成一个一个的元祖,key作为元祖的第一个元素,value作为元祖的第二个元素
students_dict={'name':'木子李','study_id':'py1805001',
'scores':{'english':90,'math':100}}
keys=students_dict.keys()
print(keys,type(keys))
#dict_keys(['name', 'study_id', 'scores']) <class 'dict_keys'>
(4)遍历获取每个key
for key in keys:
print(key)
'''
结果:
name
study_id
scores
'''
print(students_dict.values())
#dict_values(['木子李', 'py1805001', {'english': 90, 'math': 100}])
print(students_dict.items())
#dict_items([('name', '木子李'), ('study_id', 'py1805001'), ('scores', {'english': 90, 'math': 100})])
6.遍历字典
(1)直接遍历字典获取的是所有的key(推用,内存消耗小)
for key in students_dict:
print(key,students_dict[key])
'''
结果:
name 木子李
study_id py1805001
scores {'english': 90, 'math': 100}
'''
(2)遍历直接取到key和value(不推荐使用)
for key,value in students_dict.items():
print(key,value)
'''
结果:
name 木子李
study_id py1805001
scores {'english': 90, 'math': 100}
'''
7.列表中有字典、字典中有字典、字典中有列表
练习:声明一个变量,作用是用来储存一个班的学生信息,信息包括姓名,性别,年龄,电话,至少存三个学生信息
students=[{'name':'张三','sex':'女','age':17,'tel':'1111'},
{'name':'李四','sex':'男','age':10,'tel':'2222'},
{'name':'王麻子','sex':'男','age':60,'tel':'333'}]
class1 = {
'name': 'py1805',
'address': '19-1',
'students':[
{'name': '张三', 'age': 18},
{'name': '李四', 'age': 28},
{'name': '王五', 'age': 20},
]
}
8.其他操作
(1)formkeys()
dict.formkeys(序列,value):创建一个新的字典,序列中的元素作为key,value作为值
new_dict = dict.fromkeys(['abc', 'dcc', '123'], '100')
print(new_dict) #{'abc': '100', 'dcc': '100', '123': '100'}
(2)in
key in 字典:判断字典中是否存在指定的key
dog_dict={'color':'black','age':3,'type':'二哈'}
print('type' in dog_dict) #True (判断键是否存在在字典中)
(3)update(更新)
字典1.update(字典2):使用字典2中的元素,去更新字典1中的键值对;如果字典2中对应的键值对在字典1中不存在就添加,存在就更新
dict1={'a':'aa','b':'bbb'}
dict1.update({'c':'ccc','a':'111'})
print(dict1) #{'a': '111', 'b': 'bbb', 'c': 'ccc'}