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'}
|