博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python字典类型及操作
阅读量:3957 次
发布时间:2019-05-24

本文共 5805 字,大约阅读时间需要 19 分钟。

文章目录

一. 字典类型定义(dict)

1. 映射

映射是一种键(索引)和值(数据)的对应关系

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2. 字典类型是映射的体现

Python语言中的字典就可以用来存储映射这种对应关系

键值对:键是数据索引的扩展

字典是键值对的集合,键值对之间无序

字典中键-值对的排列顺序和添加顺序没有必然联系

字典是 Python 最强大的数据类型之一,通过键-值对的方式建立数据对象之间的映射关系。字典的每个键-值对用冒号:分割,每个键-值对间用逗号,分隔开,字典则包含在{}中

d = { key1 : value1, key2 : value2 }

3. 创建字典

字典是通过键、值对的形式存储数据之间映射关系的一种数据结构

而创建字典的过程就是创建键与值之间的关联

(1). 直接创建字典

语法:

字典变量 = {键1:值1,键2:值2,....}
创建一个空的字典字典名 = {
}dicAreas = {
}

(2). 使用内置函数dict()创建字典

Python语言支持将一组双元素序列转换为字典

存储双元素的可以是元组、也可以是列表,但是一定只能包含两个元素,否则创建字典会失败

语法

items = [('俄罗斯', 1707.5), ('加拿大', 997.1), ('中国', 960.1)]dicAreas = dict(items)>>>dicAreas{
'俄罗斯': 1707.5, '加拿大': 997.1, '中国': 960.1}

(3). 字典的键和值的注意点

1. 键具有唯一性

字典中不允许出现相同的键,但是不同的键允许对应相同的值

>>> items = [('俄罗斯', 1707.5), ('加拿大', 997.1), ('中国', 960.1), ('俄罗斯',1700)]>>> dicAreas = dict(items)>>> dicAreas{
'俄罗斯': 1700, '加拿大': 997.1, '中国': 960.1}其中上面有两个俄罗斯的元组,但是最终将后一个元组保存在字典中

2. 字典中的键必须是不可变类型

一般是字符串、数字、或者元组,而值却可以是任何数据类型

>>> dicAreas = {
'俄罗斯': [1707.5, '莫斯科'], '加拿大': [997.1,'渥太华'], '中国': [960.1, '北京']}>>> dicAreas{
'俄罗斯': [1707.5, '莫斯科'], '加拿大': [997.1, '渥太华'], '中国': [960.1, '北京']}如果在字典的定义中确实需要使用多个子元素联合充当键,不能使用列表,可以使用元组>>> dicAreas = {
(1707.5, '莫斯科'):'俄罗斯', (997.1,'渥太华'):'加拿大',(960.1, '北京'):'中国'}>>> dicAreas{
(1707.5, '莫斯科'): '俄罗斯', (997.1, '渥太华'): '加拿大', (960.1, '北京'): '中国'}

4. 字典的访问

1. 定义

字典中存储了若干条目,但都是无序的,这意味着字典没有索引的概念,它不通过索引访问条目,而是通过键访问条目

字典只能通过键到值的单向访问,不能反过来通过值来访问键

2. 通过键来访问值的所有部分:

语法格式

字典名[键]
>>>dicAreas{
'俄罗斯': 1707.5, '加拿大': 997.1, '中国': 960.1}>>>dicAreas['中国']960.1

注:

当访问了一个不存在的键则会报错当使用索引访问字典也会报错

3. 通过键来访问值的某一部分:语法格式

前提是:字典中的值是个序列类型

语法格式:

字典名[键][值的索引值]
dicAreas = {
'俄罗斯': [1707.5, '莫斯科'], '加拿大': [997.1,'渥太华'], '中国': [960.1, '北京']}>>> dicAreas ['中国'][960.1, '北京']>>> dicAreas ['中国'][0]960.1

二. 字典处理函数及方法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三. 字典的基本操作

字典存放的是数据和数据之间的映射关系,对应的条目是“键值对”

1. 字典的更新

(1). 给字典添加条目

1. 定义

给字典添加条目即添加一对新的“键值对”

字典是一种动态数据结构,可随时在字典中添加键-值对。要添加键-值对时,可依次指定字典名、键和键对应的值。

2. 语法

通过赋值语句完成键值对的映射

字典名[键] = 值
>>> dicAreas = {
}>>> dicAreas['俄罗斯'] = 1707.5>>> dicAreas['中国'] = 960.1>>> dicAreas{
'俄罗斯': 1707.5, '中国': 960.1}
# 创建并初始化menu字典menu = {
'fish':40, 'pork':30, 'potato':15, 'noodles':10}# 向menu字典中添加菜名和价格menu['juice'] = 12menu['egg'] = 5# 输出新的menuprint(menu)输出结果:{
'fish': 40,'pork': 30,'potato': 15,'noodles': 10, 'juice': 12,'egg': 5}

(2). 修改字典条目

1. 定义

语法和添加字典条目语法相同,通过赋值语句进行修改

2. 语法

字典名[键] = 值

注:用于修改的条目,指定的键必须对应已存在的条目

>>> dicAreas{
'俄罗斯': 1707.5, '中国': 960.1}>>> dicAreas['俄罗斯'] = 1707>>> dicAreas{
'俄罗斯': 1707, '中国': 960.1}

2. 删除字典的条目

(1). 使用del命令删除指定条目

1. 语法

del 字典名[键]

(2). 使用pop()方法删除指定条目

1. 语法

字典名.pop(键, 默认值)

当删除字典中不存指定的键,系统返回默认值

字典名.pop(键)

当删除字典中不存在的指定的键,系统会报错

2. 注意

  1. 使用pop()方法删除指定键的对应条目会有一个返回值
  2. 使用pop()方法,最少包含一个用于指定键的参数,没有参数,系统报错

(3). 使用popitem()方法随机删除字典条目

1. 定义

popitem()方法随机删除并返回某个完整的条目

2. 语法

字典名.popitem()

3. 注意

Python3.6版本之后,popitem()方法默认删除并返回最后一个字典的条目

popitem()方法没有参数

(4). 使用clear()方法清空字典条目

1. 语法

字典名.clear()

2. 注意

使用clear()方法的字典虽然删除了所有的条目,但是依然是一个字典

(5). 直接删除整个字典

1. 语法

del 字典名

2. 注意

del操作删除了字典的本身,即从内存中注销了该字典的对象

3. 查找字典条目

(1). 成员运算符in

1. 语法

键 in 字典

当查找的条目在字典中,返回值为True反之为False

(2). 用get()方法获取条目的值

1. 语法

字典名.get(键, 默认值)

按照指定的键访问字典对应的条目,如果指定的键在字典中,返回对应的值如果指定的值不在字典中,返回默认值

字典名.get(键)

当指定的键不在字典中,系统执行语句但不返回任何信息

四. 字典的整体操作

1. 字典的遍历

和序列的遍历操作类似,字典的遍历也是通过for循环来实现的

(1). 遍历字典中所有的键

1. 语法

字典中有一个称为keys()的方法可以用来返回字典中所有的键

keys()方法配合for循环就可以遍历字典中的每一个键

for key in dicAreas.keys():	print(key)
# 创建并初始化menu菜单字典menu={
'fish':'40','pork':'30','potato':'20','lamb':'50'}# 利用keys()方法遍历输出键for key in menu.keys(): print('food_name:'+key)输出结果:food_name:fishfood_name:porkfood_name:potatofood_name:lamb

在进而通过键与值的映射就可以访问对应的值,从而遍历所有的条目

通过print(key, dicAreas[key])就可以输出键和值

(2). 遍历字典中所有的值

1. 语法

字典提供一个用来返回所有值的方法values()

使用values()方法配合for循环一起使用就可以遍历所有值

for value in dicAreas.values():	print(values)
# 创建并初始化menu菜单字典menu={
'fish':'40','pork':'30','potato':'20','lamb':'50'}# 利用values()方法遍历输出值for value in menu.values(): print('food_price:'+value)输出结果:food_price:40food_price:30food_price:20food_price:50

虽然通过values()方法可以遍历字典所有的值,但是却无法映射到对应的键,进而无法完整遍历条目信息

(3). 遍历字典中所有的条目

1. 定义

keys()方法和values()方法只能单独给出字典的键或值的内容

字典items()方法可以以(键,值)形式返回所有条目

2. 语法

for item in dicAreas.items():	print(item)
# 创建并初始化menu菜单字典menu={
'fish':'40','pork':'30','potato':'20','lamb':'50'}# 利用items()方法遍历输出键和值for key,value in menu.items(): print('\nkey:'+key) print('value:'+value)输出结果:key:fishvalue:40key:porkvalue:30key:potatovalue:20key:lambvalue:50

注:通过items()方法遍历得到的每个条目是一个元组,对于这样的元组,既可以整体访问,也可以分别对其的键和值分别访问

2. 字典的排序

3. 字典的合并

(1). 使用for循环

1. 定义

通过for循环遍历字典将其中的条目逐条追加到另一个字典中

2. 语法

for k, v in dicOthers.items():	dicAreas [k] = v

(2). 使用字典的update()方法

1. 定义

使用update()方法,将参数字典添加到调用方法的字典中

2. 语法

字典名.update(参数字典名)

dicAreas.update(dicOthers)

3. 注意

update()方法更新的是调用方法的字典,作为参数的字典内容不会发生变化

(3). 使用dict()函数

五. 字典的存储

1. 列表中存储字典

# 创建3个菜单字典,包含菜名和价格menu1 = {
'fish':40, 'pork':30, 'potato':20,'noodles':15}menu2 = {
'chicken':30, 'corn':55, 'lamb':65,'onion':12}menu3 = {
'bacon':36, 'beaf':48, 'crab':72,'eggs':7}# 将3个菜单字典存储到列表menu_total中menu_total = [menu1,menu2,menu3]# 输出列表print(menu_total)输出结果:[{
'fish': 40, 'pork': 30, 'potato': 20, 'noodles': 15}, {
'chicken': 30, 'corn': 55, 'lamb': 65, 'onion': 12}, {
'bacon': 36, 'beaf': 48, 'crab': 72, 'eggs': 7}]

2. 字典中存储列表

# 初始化menu菜单,里面包含配料列表menu = {
'fish':['vinegar','soy','salt'], 'pork':['sugar','wine']}# 输出pork这道菜的配料print('The burding of pork is:',menu['pork'])输出结果:The burding of pork is: ['sugar', 'wine']

3. 字典中存储字典

# 创建一个字典menu_sum,里面包含两个子菜单字典menu1和menu2menu_sum = {
'menu1':{
'fish':40, 'pork':30, 'potato':20,'noodles':15}, 'menu2':{
'chicken':30, 'corn':55, 'lamb':65,'onion':12}}# 输出menu1和menu2中的菜名和价格print(menu_sum['menu1'])print(menu_sum['menu2'])输出结果:{
'fish': 40, 'pork': 30, 'potato': 20, 'noodles': 15}{
'chicken': 30, 'corn': 55, 'lamb': 65, 'onion': 12}

六. 字典类型应用场景

1. 对映射的表达

在这里插入图片描述

2. 元素遍历

在这里插入图片描述

转载地址:http://mmxzi.baihongyu.com/

你可能感兴趣的文章
javascript注册window的onload事件问题研究
查看>>
客户端技术分页控件javascript+css,可用于任何服务器端技术
查看>>
学习Swing 的网站[转]
查看>>
Google App engine 的第一个应用 midispot
查看>>
提问的智慧
查看>>
关于dom4j无法解析xmlns问题及生成非UTF-8字符集乱码问题的解决
查看>>
很好的一篇文章 如果让我重做一次研究生 王汎森
查看>>
保护U盘批处理文件
查看>>
hibernate 自动导入sql 文件import.sql 国际化编码的问题的解决方案
查看>>
第七颗头骨 & 忘魂花 凤凰
查看>>
李小龙哲学之言
查看>>
潜伏中体现的潜规则
查看>>
[Java] Appfuse 源代码分析
查看>>
[Java] Appfuse 最佳实践
查看>>
[心情] 如果有一天
查看>>
[随笔] 6月近况小记 & 一个站点优化问题
查看>>
[Perl] 关于 Bugzilla 的一些问题与研究
查看>>
[Linux] 常用 linux 系统命令及维护备忘
查看>>
[Linux] 关于 Ext4 HowTo
查看>>
[杂记] 新年物语&关于Mysql引擎性能测试
查看>>