暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python入门与实战--字典

424

5.1 字典简介

字典是python中一种常用的数据结构,存放的是两组数据及映射关系,类似于数学中映射关系中的单映射。字典的两组数据,一组称为key(键),一组数据称为value(值),键和值组成一对,用冒号表示对应,即key:value,每个key:value是字典中的一个元素,元素和元素之间用逗号隔开,例如:

my_dict = {key1:value1, key2:value2, key3:value3}

字典中的元素没有先后次序之分,列表中的每个元素是有先后次序之分。

5.2 字典的创建

字典常见的常见的创建方式有两种:直接赋值创建和使用dict创建。

直接赋值创建:

>>> cvtutorials = {"host_name" : "cvtutorials", "domain_name_suffix" : "com"}
>>> cvtutorials
{'host_name': 'cvtutorials', 'domain_name_suffix': 'com'}

使用dict创建:

>>> cvtutorials = dict(host_name="cvtutorials", domain_name_suffix="com")
>>> cvtutorials
{'host_name': 'cvtutorials', 'domain_name_suffix': 'com'}

5.3 访问字典

访问字典需要用到字典名和索引(字典中的索引是key):

字典名[key]

cvtutorials = dict(host_name="cvtutorials", domain_name_suffix="com")
print(cvtutorials["host_name"])
print(cvtutorials["domain_name_suffix"])

运行结果如下:

>>> cvtutorials = dict(host_name="cvtutorials", domain_name_suffix="com")
>>> print(cvtutorials["host_name"])
cvtutorials
>>> print(cvtutorials["domain_name_suffix"])
com

dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值。

>>> cvtutorials = {'host_name': 'cvtutorials', 'domain_name_suffix': 'com'}
>>> cvtutorials.get("host_name")
'cvtutorials'

dict.get(key)方法和dict[key]的最大不同点:在键不存在时,前者不会报错,后者会报错:

>>> cvtutorials = {'host_name': 'cvtutorials', 'domain_name_suffix': 'com'}
>>> cvtutorials.get("host_name")
'cvtutorials'
>>> cvtutorials.get("cv")
>>> cvtutorials["cv"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'cv'

dict.setdefault(key, default=None) 如果键不存在,那么会添加键并将值设为default,举个例子:

>>> cvtutorials = {'host_name': 'cvtutorials', 'domain_name_suffix': 'com'}
>>> cvtutorials.setdefault("host_name")
'cvtutorials'
>>> cvtutorials
{'host_name': 'cvtutorials', 'domain_name_suffix': 'com'}
>>> cvtutorials.setdefault("domain")
>>> cvtutorials
{'host_name': 'cvtutorials', 'domain_name_suffix': 'com', 'domain': None}

5.4 字典的遍历

dict.items 访问字典的所有键值对,并返回可迭代对象(方便后面章节中的循环进行遍历),举个简单的例子:

>>> cvtutorials = {"host_name" : "cvtutorials", "domain_name_suffix" : "com"}
>>> cvtutorials.items()
dict_items([('host_name', 'cvtutorials'), ('domain_name_suffix', 'com')])

dict.keys 访问字典中的所有键,并返回可迭代对象,举个例子:

>>> cvtutorials = {"host_name" : "cvtutorials", "domain_name_suffix" : "com"}
>>> cvtutorials.keys()
dict_keys(['host_name', 'domain_name_suffix'])

dict.values 访问字典中的所有值,并返回可迭代对象,举个例子:

>>> cvtutorials = {"host_name" : "cvtutorials", "domain_name_suffix" : "com"}
>>> cvtutorials.values()
dict_values(['cvtutorials', 'com'])

5.5 修改字典和添加键-值对

这里将修改字典和添加键-值对放在一起讨论,有点类似于移动文件到某个文件夹下,如果存在同名文件就会覆盖,不存在就会移动。

添加键-值对的时候,如果key已经存在,value就会覆盖原有的,如果不存在就相当于添加键-值对,如下所示:

>>> cvtutorials = {'host_name': 'cvtutorials', 'domain_name_suffix': 'com'}
>>> cvtutorials["doc_build"] = "docsify"
>>> cvtutorials
{'host_name': 'cvtutorials', 'domain_name_suffix': 'com', 'doc_build': 'docsify'}
>>> cvtutorials["doc_build"] = "docsify_github"
>>> cvtutorials
{'host_name': 'cvtutorials', 'domain_name_suffix': 'com', 'doc_build': 'docsify_github'}

现在,我们来对原有的代码进行解释:我们首先创建了一个变量cvtutorials,接下来添加了键-值对,因为原有字典cvtutorials中没有名称为"doc_build"的key,所以这是添加键-值对的操作,我们打印了新添加的键-值对。最后,我们对键"docsify_build"进行赋值,因为"docsify_build”这个key已经存在了,此时的操作就是修改字典的操作,在5处可以看到修改后的结果。

dict1.update(dict2) 将一个字典dict2中的所有键值对添加到另一个字典dict1中。

>>> dict1 = {"1":"one", "2":"two"}
>>> dict2 = {"3":"three", "4":"four"}
>>> dict1.update(dict2)
>>> dict1
{'1': 'one', '2': 'two', '3': 'three', '4': 'four'}

5.6 删除键-值对

我们使用del对某个键-值对进行删除,标准形式为:

del 字典名[键]

例如,运行如下代码,可以看到相应的键值对被删除了。

>>> cvtutorials = {'host_name': 'cvtutorials', 'domain_name_suffix': 'com', 'doc_build': 'docsify_github'}
>>> del cvtutorials["doc_build"]
>>> cvtutorials
{'host_name': 'cvtutorials', 'domain_name_suffix': 'com'}

dict.clear() 清空字典中的所有元素。

>>> cvtutorials = {'host_name': 'cvtutorials', 'domain_name_suffix': 'com', 'domain': None}
>>> cvtutorials.clear()
>>> cvtutorials
{}

5.7 其他字典方法

len() 这个方法会计算字典的长度,也就是字典中键的数目。请注意,这里字典变量应该放在len()的括号中,和前面的方法要注意区别。

>>> cvtutorials = {"host_name" : "cvtutorials", "domain_name_suffix" : "com"}
>>> len(cvtutorials)
2

dict.copy() 将字典复制一份,举个简单的例子:

>>> cvtutorials = {"host_name" : "cvtutorials", "domain_name_suffix" : "com"}
>>> dict1 = cvtutorials.copy()
>>> dict1
{'host_name': 'cvtutorials', 'domain_name_suffix': 'com'}


文章转载自机器视觉全栈er,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论