您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。
本文主要介绍Python数据类型中的字典(dict),咱们一次把字典聊个透彻。
干货满满,建议收藏,需要用到时常看看。 小伙伴们如有问题及需要欢迎私信或者留言给我哦~ ~ ~。
字典是什么?
列表(list)和元组(tuple)这两种非常常用的序列。今天要介绍另外一种使用非常广泛的序列—字典(dict)。小伙伴们哪怕没有接触过dict这个数据类型,也一定听说过字典这个名词---->那大名鼎鼎的新华字典,不会没有人用过吧!!!
看到这图片,是不是勾起了儿时上学的回忆啦。哈哈哈哈
回想一下我们是怎么通过新华字典查询一个汉字的?是不是根据拼音去查找汉字的
,具体查找细节相信大家都懂的。把查询字典的过程映射到同样道理Python中的字典(dict)就是通过键(key)去找值(value)的,字典(dict)底层的数据结构是哈希表的结构。
字典怎么用?
说完了字典的基本概念,接下来就说说字典该如何使用,只有能用起来的东西才是好东西。本章将介绍字典的增删改查。字典的基本结构是:
{'key1':'value1', 'key2':'value2', ..., 'keyn':valuen}
其中key1~keyn
表示键,value1~valuen
表示键所对应的值。需要注意的是字典中所有的键都是唯一的(每个人都是独一无二的),有且仅有一个键可以为空值None,而且只能用不可变的类型,比如字符串,整数,小数,元组。而值可以是任何Python支持的数据类型且值可以为空值None,为空值None的值的数量不限。
创建一个字典
创建字典的方式有很多种,下面罗列几种比较常见的方法。
第一种:使用 {} 符号来创建字典,其语法结构是dictname={'key1':'value1', 'key2':'value2', ..., 'keyn':valuen}
第二种:使用fromkeys方法,其语法结构是dictname = dict.fromkeys(list,value=None)
, 其中,list参数表示字典中所有键的列表(list),value参数表示默认值,如果不写则为所有的值都为空值None。
第三种:使用dict方法,其分为四种情况:
- dict() -> 创建一个空字典
- dict(mapping) -> 创建一个字典,初始化时其键值分别来自于mapping中的key,value。
- dict(iterable) -> 创建一个字典,初始化时会遍历iterable得到其键值。
for k, v in iterable:
d[k] = v
dict(**kwargs)
->**kwargs
是可变函数,其调用的语法格式是:dict(key1=value1,key2=value2,...keyn=valuen)
,例如:dict(name='码农飞哥', age=17, weight=63)
这三种创建字典的方式都介绍完了,下面就来看看示例说明吧:
#1. 创建字典
d = {'name': '码农飞哥', 'age': 18, 'height': 185}
print(d)
list = ['name', 'age', 'height']
# 2. fromkeys方法
dict_demo = dict.fromkeys(list)
dict_demo1 = dict.fromkeys(list, '测试')
print(dict_demo)
print(dict_demo1)
# 通过dict()映射创建字典,传入列表或者元组
demo = [('name', '码农飞哥'), ('age', 19)]
dict_demo2 = dict(demo)
print(dict_demo2)
dict_demo21 = dict(name='码农飞哥', age=17, weight=63)
print(dict_demo21)
运行结果是:
{'name': '码农飞哥', 'age': 18, 'height': 185}
{'name': None, 'age': None, 'height': None}
{'name': '测试', 'age': '测试', 'height': '测试'}
{'name': '码农飞哥', 'age': 19}
{'name': '码农飞哥', 'age': 17, 'weight': 63}
字典的访问
说完了字典的创建之后,接着就让我们来看看字典的访问。字典不同于列表和元组,字典中的元素不是依次存储在内存区域中的;所以,字典中的元素不能通过索引来访问,只能是通过键来查找对应的值。 ,其有两种不同的写法。
- 第一种方式的语法格式是
dictname[key]
,其中dictname表示字典的名称,key表示指定的键。如果指定的键不存在的话,则会报KeyError 错误。 - 第二种方式的语法格式是
dictname.get(key)
,其中dictname表示字典的名称,key表示指定的键。如果指定的键不存在的话,则会返回None。
举个栗子说明下吧,下面代码的意思是根据键名为name
查找其对应的值。
dict_demo5 = {'name': '码农飞哥', 'age': 18, 'height': 185}
print(dict_demo5['name'])
print(dict_demo5.get('name'))
print('键不存在的情况返回结果=',dict_demo5.get('test'))
运行结果是:
码农飞哥
码农飞哥
键不存在的情况返回结果= None
添加和修改键值对
添加键值对的方法很简单,其语法结构是dictname[key]=value
,如果key在字典中不存在的话,则会新增一个键值对。如果key在字典中存在的话,则会更新原来键所对应的值。依然是举例说明下:本例中代码的结果是增加键值对 sex='男'
,把键height对应的值改成了190
。
# 添加键值对
dict_demo6 = {'name': '码农飞哥', 'age': 18, 'height': 185}
dict_demo6['sex'] = '男'
print('新增键值对的结果={0}'.format(dict_demo6))
# 修改键值对
dict_demo6['height'] = 190
print('修改键值对的结果={0}'.format(dict_demo6))
运行结果是:
新增键值对的结果={'age': 18, 'name': '码农飞哥', 'height': 185, 'sex': '男'}
修改键值对的结果={'age': 18, 'name': '码农飞哥', 'height': 190, 'sex': '男'}
当然修改和删除键值对也可以通过update方法来实现,其具体的语法格式是:dictname.update(dict)
,其中,dictname为字典的名称,dict为要修改的字典的值。该方法既可以新增键值对,也可以修改键值对。 该方法没有返回值,即是在原字典上修改元素的。下面例子中就是将键name的值改成了飞飞1024,键age对应的值改成了25。并新增了键值对 like=学习
。
# update方法
dict_demo7 = {'name': '码农飞哥', 'age': 18, 'height': 185, 'width': 100}
dict_demo7.update({'name': '飞飞1024', 'age': 25, 'like': '学习'})
print('update方法返回结果={}', dict_demo7)
运行结果为:
update方法返回结果={} {'height': 185, 'like': '学习', 'width': 100, 'name': '飞飞1024', 'age': 25}
删除键值对
删除键值对的方法有三种:
- 第一种是
del dictname[key]
,使用del关键字,其中dictname为字典的名称,key为要删除的键。如果键不存在的话则会报KeyError错误。 - 第二种方式是通过pop方法,其语法结构是:
dictname.pop(key)
。该方法是用于删除指定键值对,没有返回值,如果key不存在的话不会报错。 - 第三种方式是通过popitem方法,其语法结构是:
dictname.popitem()
。该方法用于删除字典中最后一个键值对。举例说明下吧:
dict_demo10 = {'name': '码农飞哥', 'age': 18, 'height': 185, 'width': 100}
# 删除键值对
del dict_demo6['height']
print('删除键height对之后的结果=', dict_demo6)
# pop()方法和popitem()方法
dict_demo10.pop('width')
print('pop方法调用删除键width之后结果=', dict_demo10)
dict_demo10 = {'name': '码农飞哥', 'age': 18, 'height': 185, 'width': 100}
dict_demo10.popitem()
print('popitem方法调用之后结果=', dict_demo10)
运行结果是:
删除键height对之后的结果= {'name': '码农飞哥', 'sex': '男', 'age': 18}
pop方法调用删除键width之后结果= {'name': '码农飞哥', 'height': 185, 'age': 18}
popitem方法调用之后结果= {'width': 100, 'name': '码农飞哥', 'height': 185}
可以看出popitem方法删除的键并不是最后一个键width,而是键age。而且删除之后字典中元素的顺序都改变了。
其他的方法说明:
- 判断指定键在字典中是否存在,其语法结构是:
key in dictname
,其中key要查找的键,dictname是字典名称。in 表示查找键是否在字典中存在,如果是查找键是否不再字典中存在,则需要用not in
关键字。举个例子:
dict_demo6 = {'name': '码农飞哥', 'age': 18, 'height': 185}
print('判断键name是否存在的结果是=', ('name' in dict_demo6))
- 输出字典中所有的键,调用的方法是
keys()
,其语法结构是:dictname.keys()
。其中dictname为字典名称。 - 输出字典中所有的值,调用的方法是
values()
,其语法结构是:dictname.values()
。 - 输出字典中所有的键值对,调用的方法是
items()
,其语法结构是:dictname.items()
。
举个例子说明下吧:
dict_demo7 = {'name': '码农飞哥', 'age': 18, 'height': 185, 'width': 100}
print('keys方法返回结果=', dict_demo7.keys())
print('value方法返回结果=', dict_demo7.values())
print('item方法返回结果=', dict_demo7.items())
输出结果是:
keys方法返回结果= dict_keys(['width', 'name', 'height', 'age'])
value方法返回结果= dict_values([100, '码农飞哥', 185, 18])
item方法返回结果= dict_items([('width', 100), ('name', '码农飞哥'), ('height', 185), ('age', 18)])
使用字典格式化字符串
在序列那篇文章我们介绍了可以通过顺序转换说明符,其语法格式是:{num}
,num是编号,从0开始依次递增 搭配format 方法来格式化字符串。但是这种方法也是有弊端的,就是当字符串中有大量转换说明符时,就不方便使用了。
str = '码农飞哥{0},你一定会有={1}'
print(str.format('加油', '出息'))
输出结果是码农飞哥加油,你一定会有=出息
,这里的传参要严格按照顺序传参。
这时候我们可以通过字典来格式化字符串,其语法格式是%(name)s
其中%
是固定的写法,name对应字典中的key,s 表示字典键为name的值的类型,如果是字符串则是s。最后要通过str%dictname
来输出格式化后的字符串,其中str是原始的字符串,dictname是字典的名称。举个栗子吧!
str = '码农飞哥的第=%(num)s篇=%(article)s,希望=%(reader)s喜欢'
dict_demo12 = {'num': 250, 'article': '文章', 'reader': '读者们'}
print(str % dict_demo12)
运行结果是码农飞哥的第=250篇=文章,希望=读者们喜欢
总结
本文详细介绍了Python字典的基本概念和详细用法,希望对读者朋友们有所帮助。