字典的创建
字典是存放一系列键值对的数据结构,对标js中的对象,也对标java中的map。
现实中的例子就是通讯录,根据这个人的名字就可以得到他的电话号码。
定义字典的写法跟js中定义对象是一样的,两边花括号,中间key:value,区别在于js定义对象的时候key可以不用引号。
person = {"Bob":"13113113111","Mary":"13113113112","Mark":"13113113113"} print(person)
打印结果:
{'Bob': '13113113111', 'Mary': '13113113112', 'Mark': '13113113113'}
我们还可以使用dict函数来创建字典:
person = dict(name="小明",age=18) print(person)
打印结果:
{'name': '小明', 'age': 18}
它还允许我们将其他序列转化成字典
item = [('name','小明'),('age',18)] person = dict(item) print(person)
打印结果:
{'name': '小明', 'age': 18}
字典的基本操作
访问字典中的值
字典中的元素都是key-value的形式存放的,所以要访问某一个value,就要用到对应的key,写法是用中括号:
person = {'name' : '小明', 'age' : 18} print(person['name'])
打印结果:
小明
你还可以使用get方法来访问值:
person = {'name' : '小明', 'age' : 18} print(person.get('name'))
打印结果:
小明
他们的区别在于,使用get方法如果访问一个不存在的key,它会返回None,而使用中括号访问一个不存在的key,会报错。
还有一个有意思的方法 setdefault,它的作用是获取一个key对应的value,如果这个key存在,那么获取值,如果不存在,那么获取默认值,并往字典中插入这个key。
person = {'name' : '小明', 'age' : 18} value = person.setdefault('sex','未知') print(value) print(person)
打印结果:
未知
{'name': '小明', 'age': 18, 'sex': '未知'}
获取字典长度
len方法几乎可以对任何数据进行长度计算,字典中每一对key-value就算做一个长度
person = {'name' : '小明', 'age' : 18} print(len(person))
打印结果:
2
添加键值对
字典是动态结构,可以自由添加键值对。
person = {'name' : '小明', 'age' : 18} person['sex'] = '男' print(person)
打印结果:
{'name': '小明', 'age': 18, 'sex': '男'}
修改字典中的值
修改和添加一样的,只不过如果你的key在字典中不存在,那么就添加,如果存在,那么就修改。
person = {'name' : '小明', 'age' : 18} person['age'] = 15 print(person)
打印结果:
{'name': '小明', 'age': 15}
删除键值对
删除字典中的元素用del关键字,跟删除列表中的元素是一样的用法。
person = {'name' : '小明', 'age' : 18} del person['age'] print(person)
打印结果:
{'name': '小明'}
检查key是否存在
person = {'name' : '小明', 'age' : 18} if('name' in person): print('这个key是存在的') else: print('这个key是不存在的')
打印结果:
这个key是存在的
字典常用方法
清空字典内容 clear()
clear方法用于删除字典中的所有元素,是直接对原字典执行,方法本身不会有返回值。
person = {'name' : '小明', 'age' : 18} person.clear() print(person)
打印结果:
{}
浅复制 copy()
copy方法返回一个新字典,包含的键值对跟原来的字典完全相同。但是它只是拷贝字典中的一级对象,对于第二级对象,它只是引用。
我们实验一下,让字典里面存列表,拷贝之后再修改列表中的值
x = {'name' : '小明', 'age' : [11,12,13]} y = x.copy() y['name'] = '大明' y['age'][1] = 100 print(x) print(y)
打印结果:
{'name': '小明', 'age': [11, 100, 13]}
{'name': '大明', 'age': [11, 100, 13]}
深复制 deepcopy()
from copy import deepcopy x = {'name' : '小明', 'age' : [11,12,13]} y = deepcopy(x) y['name'] = '大明' y['age'][1] = 100 print(x) print(y)
打印结果:
{'name': '小明', 'age': [11, 12, 13]}
{'name': '大明', 'age': [11, 100, 13]}
获取所有键 keys()
keys方法返回的是一个迭代器,可以用list方法将它转换成列表
person = {'name' : '小明', 'age' : 18} print(list(person.keys()))
打印结果:
['name', 'age']
所谓的迭代器,就是可以直接用来循环的对象
person = {'name' : '小明', 'age' : 18} for item in person.keys(): print(item)
打印结果:
name
age
获取所有值 values()
person = {'name' : '小明', 'age' : 18} print(list(person.values()))
打印结果:
['小明', 18]
弹出字典中的元素 pop()
弹出的意思其实就是 获取+删除 两个操作的组合。
person = {'name' : '小明', 'age' : 18} value = person.pop('age') print(value) print(person)
打印结果:
18
{'name': '小明'}
遍历字典 items()
items方法返回一个字典视图的迭代器,包含了字典中所有的键值对,每个键值对都是以元组的形式存在
person = {'name' : '小明', 'age' : 18} y = person.items() for item in y: print(item)
打印结果:
('name', '小明')
('age', 18)
如果你想进一步取里面的数据,也可以这么写:
person = {'name' : '小明', 'age' : 18} y = person.items() for k,v in y: print(k + '---' + str(v))
打印结果:
name---小明
age---18