首页Python【Python基础】9.字...

【Python基础】9.字典(dict)类型及其操作


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Basic/lab/index.html
链接: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{'山东': ['济南''泉城'], '福建': ['福州''榕城'], '陕西': ['西安''长安']}


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments