Python的学习-6-字典及其常见操作
字典
字典是键值对的无序可变序列,字典中的每一个元素都是一个“键值对”,包含键对象和值对象。可以通过键对象实现快速获取,删除更新对应的值对象。
字典通过键对象找到对应的值对象,键是任意的不可变数据,比如:整数,浮点数,字符串,元组。但是:列表,字典,集合科协可变对象不能作为“键”,并且“键”不重复,值可以是任意数据,可重复。
字典的创建
基础方法{}和dict()
dic = {'name':'rain','age':'18','job':'student'}
dic_1 = dict(name='rain',age=18)
dic_2 = dict( [("first_name","last_name"),("age",18) ] )
print(dic)
print(dic_1)
print(dic_2)
"""
{'name': 'rain', 'age': '18', 'job': 'student'}
{'name': 'rain', 'age': 18}
{'first_name': 'last_name', 'age': 18}
"""
zip()创建字典对象
第一个参数为key,第二个参数为value。
key = ['name','age','job']
value = ['rain',18,'student']
dic = dict(zip(key,value))
print(dic)
"""
{'name': 'rain', 'age': 18, 'job': 'student'}
"""
fromkeys()创建字典对象
通过fromkeys()可以创建空值的字典对象。
a = dict.fromkeys( ['anme','age','job'] )
print(a)
字典元素的访问
通过“键”获取“值”
dic = {'name':'rain','age':'18','job':'student'}
print(dic['name'])
print(dic['job'])
"""
rain
student
"""
通过get()方法获得“值”
如果键不存在,返回NONE;也可以设定指定键不存在时默认返回的对象。
dic = {'name':'rain','age':'18','job':'student'}
print(dic.get('name'))
print(dic.get('age'))
print(dic.get('sex'))
print(dic.get('sex','Male'))#指定键不存在,返回"Male"
列出所有的键值对,键,值
#列出所有键值对
dic = {'name':'rain','age':'18','job':'student'}
print(dic.items())
"""
dict_items([('name', 'rain'), ('age', '18'), ('job', 'student')])
"""
#列出所有键
print(dic.keys())
"""
dict_keys(['name', 'age', 'job'])
"""
#列出所有值
print(dic.values())
"""
dict_values(['rain', '18', 'student'])
"""
len()获得键值对的个数;检测键是否在字典中
dic = {'name':'rain','age':'18','job':'student'}
print(len(dic))
print('name' in dic)
"""
3
True
"""
字典元素的添加,修改,删除
字典元素的添加
如果键已经存在,则覆盖旧的键值对;如果不存在则增加新的。
dic = {'name':'rain','age':'18','job':'student'}
dic['school'] = "STU"
print(dic)
"""
{'name': 'rain', 'age': '18', 'job': 'student', 'school': 'STU'}
"""
update()
使用update()将新字典中所有键值对全部添加到就字典对象上。如果key有重复,则直接覆盖。
a = {'name':'rain','age':18}
b = {'name':'rean','salary':8000}
a.update(b)
print(a)
"""
{'name': 'rean', 'age': 18, 'salary': 8000}
"""
字典元素的删除
可以使用del()方法,或者clear()删除所有键值对;pop()删除指定键值对,并返回对应值。
a = {'name':'rain','age':18}
b = {'name':'rean','salary':8000}
del (a['name'])
#也可以不加括号
#del a['name']
print(a)
print(b.pop('salary'))
popitem()随即删除和返回该键值对
因为字典没有顺序的概念,如果想要一个一个地移除并处理项,这个方法很有效。
a = {'name':'rain','age':18,'salary':8000}
print(a.popitem())
print(a)
print(a.popitem())
print(a)
print(a.popitem())
print(a)
"""
('salary', 8000)
{'name': 'rain', 'age': 18}
('age', 18)
{'name': 'rain'}
('name', 'rain')
{}
"""
序列解包(并列赋值)
序列解包用于字典时,默认是对”键“进行操作;如果需要对键值对操作,则需要使用items();如果要对值操作,则需要使用values()。
s = {'name':'rain','afe':18,'salary':6000,'school':'BTU'}
name,age,salary,school = s
print(name,age,salary,school)
name,age,salary,school = s.items()
print(name,age,salary,school)
name,age,salary,school = s.values()
print(name,age,salary,school)
字典核心底层原理
字典对象地核心是散列表。散列表是一个稀疏数组,数组地每个单元叫做bucket,每个bucket由两部分;一个是键对象地引用,一个是值对象的引用。所有的bucket结构和大小一致,可以通过偏移量来读取指定的bucket。