本文共 5805 字,大约阅读时间需要 19 分钟。
映射是一种键(索引)和值(数据)的对应关系
Python语言中的字典就可以用来存储映射这种对应关系
键值对:键是数据索引的扩展
字典是键值对的集合,键值对之间无序
字典中键-值对的排列顺序和添加顺序没有必然联系字典是 Python 最强大的数据类型之一,通过键-值对的方式建立数据对象之间的映射关系。字典的每个键-值对用冒号:分割,每个键-值对间用逗号,分隔开,字典则包含在{}中
d = { key1 : value1, key2 : value2 }
字典是通过键、值对的形式存储数据之间映射关系的一种数据结构
而创建字典的过程就是创建键与值之间的关联
语法:
字典变量 = {键1:值1,键2:值2,....}
创建一个空的字典字典名 = { }dicAreas = { }
Python语言支持将一组双元素序列转换为字典
存储双元素的可以是元组、也可以是列表,但是一定只能包含两个元素,否则创建字典会失败
语法
items = [('俄罗斯', 1707.5), ('加拿大', 997.1), ('中国', 960.1)]dicAreas = dict(items)>>>dicAreas{ '俄罗斯': 1707.5, '加拿大': 997.1, '中国': 960.1}
字典中不允许出现相同的键,但是不同的键允许对应相同的值
>>> items = [('俄罗斯', 1707.5), ('加拿大', 997.1), ('中国', 960.1), ('俄罗斯',1700)]>>> dicAreas = dict(items)>>> dicAreas{ '俄罗斯': 1700, '加拿大': 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, '北京'):'中国'}>>> dicAreas{ (1707.5, '莫斯科'): '俄罗斯', (997.1, '渥太华'): '加拿大', (960.1, '北京'): '中国'}
字典中存储了若干条目,但都是无序的,这意味着字典没有索引的概念,它不通过索引访问条目,而是通过键访问条目
字典只能通过键到值的单向访问,不能反过来通过值来访问键
语法格式
字典名[键]
>>>dicAreas{ '俄罗斯': 1707.5, '加拿大': 997.1, '中国': 960.1}>>>dicAreas['中国']960.1
注:
当访问了一个不存在的键则会报错当使用索引访问字典也会报错
前提是:字典中的值是个序列类型
语法格式:
字典名[键][值的索引值]
dicAreas = { '俄罗斯': [1707.5, '莫斯科'], '加拿大': [997.1,'渥太华'], '中国': [960.1, '北京']}>>> dicAreas ['中国'][960.1, '北京']>>> dicAreas ['中国'][0]960.1
字典存放的是数据和数据之间的映射关系,对应的条目是“键值对”
给字典添加条目即添加一对新的“键值对”
字典是一种动态数据结构,可随时在字典中添加键-值对。要添加键-值对时,可依次指定字典名、键和键对应的值。
通过赋值语句完成键值对的映射
字典名[键] = 值
>>> 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}
语法和添加字典条目语法相同,通过赋值语句进行修改
字典名[键] = 值
注:用于修改的条目,指定的键必须对应已存在的条目
>>> dicAreas{ '俄罗斯': 1707.5, '中国': 960.1}>>> dicAreas['俄罗斯'] = 1707>>> dicAreas{ '俄罗斯': 1707, '中国': 960.1}
del 字典名[键]
字典名.pop(键, 默认值)
当删除字典中不存指定的键,系统返回默认值
字典名.pop(键)
当删除字典中不存在的指定的键,系统会报错
popitem()方法随机删除并返回某个完整的条目
字典名.popitem()
Python3.6版本之后,popitem()方法默认删除并返回最后一个字典的条目
popitem()方法没有参数
字典名.clear()
使用clear()方法的字典虽然删除了所有的条目,但是依然是一个字典
del 字典名
del操作删除了字典的本身,即从内存中注销了该字典的对象
键 in 字典
当查找的条目在字典中,返回值为True反之为False
字典名.get(键, 默认值)
按照指定的键访问字典对应的条目,如果指定的键在字典中,返回对应的值如果指定的值不在字典中,返回默认值
字典名.get(键)
当指定的键不在字典中,系统执行语句但不返回任何信息
和序列的遍历操作类似,字典的遍历也是通过for循环来实现的
字典中有一个称为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])就可以输出键和值
字典提供一个用来返回所有值的方法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()方法可以遍历字典所有的值,但是却无法映射到对应的键,进而无法完整遍历条目信息
keys()方法和values()方法只能单独给出字典的键或值的内容
字典items()方法可以以(键,值)形式返回所有条目
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()方法遍历得到的每个条目是一个元组,对于这样的元组,既可以整体访问,也可以分别对其的键和值分别访问
通过for循环遍历字典将其中的条目逐条追加到另一个字典中
for k, v in dicOthers.items(): dicAreas [k] = v
使用update()方法,将参数字典添加到调用方法的字典中
字典名.update(参数字典名)
dicAreas.update(dicOthers)
update()方法更新的是调用方法的字典,作为参数的字典内容不会发生变化
# 创建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}]
# 初始化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']
# 创建一个字典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}
转载地址:http://mmxzi.baihongyu.com/