本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Basic/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接:https://pan.baidu.com/s/1x2Ynh_VibPY2u-HWTaJo8w?pwd=mnsj
提取码:mnsj
-
前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Basic
——————————————————
1.字典的概念:
字典是包含0个或多个键值对的集合,没有长度限制,可以根据键名索引值的内容。
字典是存储可变数量键值对的数据结果,键和值可以是任意数据类型,包括程序自定义的类型。
Python中的字典通过大括号{}来表示,具体形式如下:
{<键1>:<值1> , <键2>:<值2> , ... , <键n>:<值n>}
其中,键值间通过冒号连接,不同键值对间通过逗号分隔。
由于大括号{}也可以表示集合,因此字典类型也具有和集合类似的性质,即键值对之间没有顺序且不能重复,可以将字典类型看成元素是键值对的集合。
-
可以使用大括号{}创建字典:
1# 字典是键值对的集合
2>>> province_dict = {"a":"b" , "c":"d" , "e":"f"}
3>>> province_dict
4{'a': 'b', 'c': 'd', 'e': 'f'}
-
也可以使用dict()函数将双值序列转换为字典。
可以是双项列表的列表:
1>>> lol = [["a","b"] , ["c","d"] , ["e","f"]]
2>>> dict(lol)
3{'a': 'b', 'c': 'd', 'e': 'f'}
可以是双项元祖列表:
1>>> lot = [("a","b") , ("c","d") , ("e","f")]
2>>> dict(lot)
3{'a': 'b', 'c': 'd', 'e': 'f'}
可以是双项列表元祖:
1>>> tol = (["a","b"] , ["c","d"] , ["e","f"])
2>>> dict(tol)
3{'a': 'b', 'c': 'd', 'e': 'f'}
可以是双字母字符串列表:
1>>> los = ['ab' , 'cd' , 'ef']
2>>> dict(los)
3{'a': 'b', 'c': 'd', 'e': 'f'}
可以是双字母字符串元祖:
1>>> tos = ('ab' , 'cd' , 'ef')
2>>> dict(tos)
3{'a': 'b', 'c': 'd', 'e': 'f'}
-
使用[key]获取、添加、修改字典项。
字典类型中键值对的访问模式如下,采用中括号格式:
<值> = <字典变量dict>[<键名>]
1>>> province_dict = {'山东': '济南', '福建': '福州', '陕西': '西安'}
2>>> province_dict['山东']
3'济南'
字典类型中对某个键值的修改可以通过中括号访问加赋值实现:
1# 字典类型中对某个键值的修改
2>>> province_dict['山东'] = '泉城'
3>>> province_dict
4{'山东': '泉城', '福建': '福州', '陕西': '西安'}
也可以采用上述方法为字典添加新元素:
1# 为字典添加新元素
2>>> province_dict['河北'] = '石家庄'
3>>> province_dict
4{'山东': '泉城', '福建': '福州', '陕西': '西安', '河北': '石家庄'}
也可以直接使用大括号创建一个空字典,然后采用上述赋值方法增加元素:
1# 创建一个空字典,通过赋值方法增加元素
2>>> country_dict = {}
3>>> country_dict
4{}
5>>> country_dict['中国'] = '北京'
6>>> country_dict['英国'] = '伦敦'
7>>> country_dict
8{'中国': '北京', '英国': '伦敦'}
-
字典也支持成员关系符(in)、长度计算函数(len())。
1>>> province_dict = {'山东': '济南', '福建': '福州', '陕西': '西安'}
2>>> '山东' in province_dict
3True
4>>> '山西' not in province_dict
5True
6>>> len(province_dict)
73
-
字典比较
字典支持==、!=比较运算符进行比较,其他运算符不适用。
1>>> dict_1 = {'山东': '济南', '福建': '福州', '陕西': '西安'}
2>>> dict_2 = {'山东': '泉城', '福建': '福州', '陕西': '西安'}
3>>> dict_1 == dict_2
4False
5>>> dict_1 != dict_2
6True
2.字典的操作:
Python中字典内部也采用面向对象的方式实现,因此也有一些对应的方法,采用<a>.<b>()的格式。
2.1 获取字典键值内容:
函数和方法 |
描述 |
<d>.keys() | 返回所有的键信息 |
<d>.values() | 返回所有的值的信息 |
<d>.items() | 返回所有的键值对 |
<d>.get(key[, value]) | 键存在则返回相应值,否则返回value值(如果未指定value值,则返回None) |
1>>> province_dict = {'山东': '济南', '福建': '福州', '陕西': '西安', '河北': '石家庄'}
2>>> province_dict.keys()
3dict_keys(['山东', '福建', '陕西', '河北'])
4>>> province_dict.values()
5dict_values(['济南', '福州', '西安', '石家庄'])
6>>> province_dict.items()
7dict_items([('山东', '济南'), ('福建', '福州'), ('陕西', '西安'), ('河北', '石家庄')])
8>>> province_dict.get('山东')
9'济南'
10>>> province_dict.get('山西')
11>>>
12>>> province_dict.get('山西' , '不存在')
13'不存在'
keys()、values()、items()返回的结果分别为dict_keys、dict_values、dict_items(可迭代视图),而不像Python 2中会返回列表。之所以这样设计,是因为对于大型字典来说会很方便,无须再花费时间和内存来创建和存储你可能并不会使用的列表。
如果需要获得列表对象,就需要调用list()函数将其转换为列表。
1>>> list(province_dict.keys())
2['山东', '福建', '陕西']
3>>> list(province_dict.values())
4['济南', '福州', '西安']
5>>> list(province_dict.items())
6[('山东', '济南'), ('福建', '福州'), ('陕西', '西安')]
2.2 合并字典:
函数和方法 |
描述 |
{**a , **b} |
键存在则返回相应值,同时删除键值对,否则返回默认值 |
dict1 | dict2 |
合并操作符(Python 3.9 新特性) |
dict |= dict2 |
把字典dict 2更新到字典 dict1 (Python 3.9 新特性) |
dict.updata(other) | 把字典other更新到字典 dict ,该方法没有返回值。 |
当两个字典中有相同的键值时,并入字典的键值会取代原有字典的键值。
1>>> dict_1 = {'山东': '济南', '福建': '福州', '陕西': '西安'}
2>>> dict_2 = {'山东': '泉城', '河北': '石家庄', '河南': '郑州'}
3>>> {**dict_1 , **dict_2}
4{'山东': '泉城', '福建': '福州', '陕西': '西安', '河北': '石家庄', '河南': '郑州'}
5>>> dict_1 | dict_2
6{'山东': '泉城', '福建': '福州', '陕西': '西安', '河北': '石家庄', '河南': '郑州'}
7>>> dict_1
8{'山东': '济南', '福建': '福州', '陕西': '西安'}
9>>> dict_1 |= dict_2
10>>> dict_1
11{'山东': '泉城', '福建': '福州', '陕西': '西安', '河北': '石家庄', '河南': '郑州'}
12>>> dict_3 = {'山西': '太原'}
13>>> dict_1.update(dict_3)
14>>> dict_1
15{'山东': '泉城', '福建': '福州', '陕西': '西安', '河北': '石家庄', '河南': '郑州', '山西': '太原'}
2.3 合并字典项:
函数和方法 |
描述 |
<d>.pop(<key>,<default>) | 键存在则返回相应值,同时删除键值对,否则返回默认值 |
<d>.popitem() | 随机从字典中取出一个键值对,以元组(key,value)形式返回 |
del <d>[<key>] | 删除字典中某一个键值对 |
<d>.clear() | 删除所有键值对 |
1>>> dict = {'山东': '济南', '福建': '福州', '陕西': '西安', '河北': '石家庄', '河南': '郑州', '山西': '太原'}
2>>> dict.pop('山东')
3>>> dict
4{'福建': '福州', '陕西': '西安', '河北': '石家庄', '河南': '郑州', '山西': '太原'}
5>>> dict.pop('吉林', '不存在')
6>>> dict
7{'福建': '福州', '陕西': '西安', '河北': '石家庄', '河南': '郑州', '山西': '太原'}
8>>> dict.popitem()
9('山西', '太原')
10>>> dict
11{'福建': '福州', '陕西': '西安', '河北': '石家庄', '河南': '郑州'}
12>>> del dict['陕西']
13>>> dict
14{'福建': '福州', '河北': '石家庄', '河南': '郑州'}
15>>> dict.clear()
16>>> dict
17{}
2.4 复制字典:
使用等号复制字典时,如果原始字典键值修改,则改动会反映到引用该字典的所有变量名称。
1>>> dict = {'山东': '济南', '福建': '福州', '陕西': '西安'}
2>>> save_dict = dict
3>>> dict['山东'] = "泉城"
4>>> dict
5{'山东': '泉城', '福建': '福州', '陕西': '西安'}
6>>> save_dict
7{'山东': '泉城', '福建': '福州', '陕西': '西安'}
如果要避免上述情况,可以使用copy()
函数将一个字典复制到另一个字典。
1>>> dict = {'山东': '济南', '福建': '福州', '陕西': '西安'}
2>>> save_dict = dict.copy()
3>>> dict['山东'] = "泉城"
4>>> dict
5{'山东': '泉城', '福建': '福州', '陕西': '西安'}
6>>> save_dict
7{'山东': '济南', '福建': '福州', '陕西': '西安'}
copy()
函数只适合字典中的值为不可变的情况,如果为可变情况,需要使用
deepcopy()
函数,即列表中提到的浅拷贝和深拷贝的问题。
1>>> import copy
2>>> dict = {'山东': ['济南' , '泉城'], '福建': ['福州' , '榕城'], '陕西': ['西安' , '长安']}
3>>> dict_1 = dict.copy()
4>>> dict_2 = copy.deepcopy(dict)
5>>> dict['山东'][1] = '泺邑'
6>>> dict
7{'山东': ['济南', '泺邑'], '福建': ['福州', '榕城'], '陕西': ['西安', '长安']}
8>>> dict_1
9{'山东': ['济南', '泺邑'], '福建': ['福州', '榕城'], '陕西': ['西安', '长安']}
10>>> dict_2
11{'山东': ['济南', '泉城'], '福建': ['福州', '榕城'], '陕西': ['西安', '长安']}
本篇文章来源于微信公众号: 码农设计师