Python字典的介绍和使用
Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。字典是另一种可变容器模型,且可存储任意类型对象。
一、什么是字典
字典是python里的一种数据类型,特点是元素的无序性,和键key的唯一性。字典的创建方法是{key:values},字典里的键key只能是不可变的数据类型(整型,字符串或者是元组),值values可以是任何数据类型。字典里的一组key:values叫做一个键值对item。
1、字典的实现原理
字典的实现原理和差字典是类似的。当我们在字典中查找某个字时,一种办法是从字典的第一页开始往后翻,
直到找到我们要查找的字为止。这种办法就是在列表中查找元素的方法,其缺点:字典中的字数越多查找的效率
越低。第二种方法是先在字典的索引表里(比如部首表)查找这个字对应的页码,然后直接到这个字对应的页,
其优点是:查找效率不会随着字典中字数的增加而降低,无论查找哪个字,查找速度非常快。
2、字典的特点
a) 字典中的所有元素都是一个key-value时,通过指定的key总能映射到唯一确定的value。字典中不可以存在重复的,
但是可以存在重复的value。
b) 字典中的元素是无序的。顺序不重要重要的是key和value的映射关系。
c) 字典中的key必须是不可变对象。存取字典中的key-value对时,系统会调用内置函数hash根据指定key计算出value
存储位置,也就是哈希值。对于指定的key,为了保证每次计算出的哈希值都是相同的,要求key必须是不可变对象。也就是说,
只有不可变对象才存在哈希值。
d) 字典可以根据需要动态地伸缩。系统会根据需要动态分配和回收内存,因此在使用前无须预先声明字典的容量。
e) 字典会浪费较大的内存,与列表相比是用空间换取查询时间。
二、为什么需要字典
例如:电话簿中存储了姓名和电话号码:
张三 111111111
李四 222222222
王五 333333333
赵六 444444444
# 姓名
names = ['张三','李四','王五','赵六']
# 电话号码
numbers = ['111111111','222222222','333333333','444444444']
print(numbers[names.index('张三')])#111111111fori,ninzip(names,numbers):print(i,n)#或者使用zip进行并行遍历张三111111111李四222222222王五333333333赵六444444444
最好是能把姓名和电话号码全部存储在一个和脚phonebook的数据结构中,就能直接获得其对应的电话号码。
phonebook={'张三':'111111111','李四':'222222222','王五':'333333333','赵六':'444444444'}print(phonebook['张三'])#111111111
三、字典的创建
1、使用花括号{}的方式
d1={'zhangsan':18,'lisi':19,'wangwu':20}print(d1)#{'zhangsan':18,'lisi':19,'wangwu':20}#空字典创建d1={}print(d1)#{}
2、使用内置函数dict()
#传递字典参数d2=dict({'zhangsan':18,'lisi':19,'wangwu':20})print(d2)#{'zhangsan':18,'lisi':19,'wangwu':20}#传递带元组的列表d2=dict([('zhangsan',18),('lisi',19),('wangwu',20)])print(d2)#{'zhangsan':18,'lisi':19,'wangwu':20}#传递zip迭代对象d2=dict(zip(['zhangsan','lisi','wangwu'],(18,19,20)))print(d2)#{'zhangsan':18,'lisi':19,'wangwu':20}
四、字典的增删改查
1、查操作
#使用[]的方法传递索引d1=dict([('name','zhangsan'),('age',18)])print(d1['name'])print(d1['age'])#get方法print(d1.get('name'))#zhangsanprint(d1.get('age'))#18print(d1.get('abc','NONE'))#get允许我们自定义返回值,如果不存在对应值或索引时
2、增操作
d1['hobby']='games'#增加一个不存在的key-value对d1.update([('wang',17),('li',16)])#使用update方法,一次增加多个key-value对d1.update({'tianqi':'19'})d1.update(zhangsan1=18)print(d1)#{'name':'zhangsan','age':18,'hobby':'games','wang':17,'li':16,'tianqi':'19','zhangsan1':18}
3、改操作
d1['age']='27'd1.update(wang=22,tianqi=23)d1.update({'name':'zhangsan1'})d1.update(hobby='read')d1.update([('tianqi',23),('zhangsan',25)])print(d1)#{'name':'zhangsan1','age':'27','hobby':'read','wang':22,'li':16,'tianqi':23,'zhangsan1':18,'zhangsan':25}
4、删操作
d1={'name':'zhangsan1','age':'27','hobby2':'games','hobby1':'read','zhangsan':25}d1.pop('name')#删除一个指定keyd1.popitem()#随机删除一个keydel(d1['age'])#删除一个指定keyprint(d1)#{'hobby2':'games','hobby1':'read'}d1.clear()#清空列表print(d1)#{}
五、字典的视图
1、调用keys,values,iteams方法打印字典视图
print(d1.keys(),type(d1.keys()))#dict_keys(['name','age','hobby2','hobby1','zhangsan'])<class'dict_keys'>打印字典的keyprint(d1.values(),type(d1.values()))#dict_values(['zhangsan1','27','games','read',25])<class'dict_values'>打印字典的valuesprint(d1.items(),type(d1.items()))#dict_items([('name','zhangsan1'),('age','27'),('hobby2','games'),('hobby1','read'),('zhangsan',25)])<class'dict_items'>#打印字典的key-value
六、为字典设置默认值
1、使用dict.setdefault()方法为字典设置默认值
#为字典设置默认值d1=dict([('name','zhangsan'),('age',18),('hobby','games')])print(d1.setdefault('name'))#zhangsan当key-value存在时,返回对应值print(d1.setdefault('score',90))#90#当key-value不存在时,赋予默认值,并添加到字典中print(d1)#{'name':'zhangsan','age':18,'hobby':'games','score':90}
七、借助字典创建格式化字符串
d1=dict([('name','zhangsan'),('age',18),('hobby','games')])#使用%作为占位符print('名字是:%s,年龄是:%i,爱好是:%s'%(d1['name'],d1['age'],d1['hobby']))print('名字是:%(name)s,年龄是:%(age)i,爱好是:%(hobby)s'%d1)#使用{}作为占位符print('名字是:{},年龄是:{},爱好是:{}'.format(d1['name'],d1['age'],d1['hobby']))print('名字是:{name},年龄是:{age},爱好是:{hobby}'.format_map(d1))
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。