文章目录
第9章 字典(dict)9.1 字典基本操作9.1.1 定义字典9.1.2 列出字典元素的值9.1.3 增加字典元素9.1.4 更改字典元素内容9.1.5 删除字典特定元素9.1.6 删除字典所有元素9.1.7 删除字典9.1.8 创建空字典9.1.9 字典的复制9.1.10 取得字典元素数量9.1.11 验证元素是否存在9.2 遍历字典9.2.1 遍历字典的键-值9.2.2 遍历字典的键9.2.3 按键排序与遍历字典9.2.4 遍历字典的值9.2.5 按值排序与遍历字典的值9.3 字典内键的值为列表9.4 while循环在字典的应用9.5 字典常用的函数和方法9.5.1 len()9.5.2 get()第9章 字典(dict)
列表与元组是依序排列,可称为序列数据结构,只要知道元素的特定位置,即可根据索引取得元素内容。而字典不同,它并不是依序排列的数据结构,通常可称为非序列数据结构,无法使用类似列表的索引值[n]的概念取得元素内容。
9.1 字典基本操作
9.1.1 定义字典
字典是一个非序列的数据结构,但是它的元素是用键值对的方式存储的,在操作时是用键(key)获取值(value)的内容。定义字典时,将“键:值”放在大括号“{}”内,字典的语法格式如下:
name_dict = {键1:值1, 键2:值2, ..., 键n:值n, } # name_dict为字典变量名称
字典的键常用的是字符串或数字,在一个字典中不可以有重复的键出现。字典的值可以是Python的任意数据对象,可以是数值、字符串、列表等。最右边的“,”可有可无。
程序实例:
heroes = {'疾风剑豪':6300, '盲僧':4800, '沙漠死神':3150, '熔岩巨兽':1350, '圣锤之毅':450} # 定义字典heroesprint(heroes) # 打印字典内容print("字典heroes的数据类型为:", type(heroes))
执行结果:
{'疾风剑豪': 6300, '盲僧': 4800, '沙漠死神': 3150, '熔岩巨兽': 1350, '圣锤之毅': 450}字典heroes的数据类型为: <class 'dict'>
9.1.2 列出字典元素的值
字典的元素是以“键:值”配对设置,要取得元素的值,可以将键作为索引,使用字典变量名称[‘键’]的方式获取。
程序实例:
heroes = {'疾风剑豪':6300, '盲僧':4800, '沙漠死神':3150, '熔岩巨兽':1350, '圣锤之毅':450} # 定义字典heroesprint("盲僧的价格为:", heroes['盲僧'], "蓝色精粹")
执行结果:
盲僧的价格为: 4800 蓝色精粹
当字典的键为整数时,可使用字典变量名称[键]的方式获取。
程序实例:
fruits = {0:'apple', 1:'banana', 2:'orange'}print(fruits[0], fruits[1], fruits[2])
执行结果:
apple banana orange
9.1.3 增加字典元素
可使用下列语法格式添加字典元素:
name_dict[键] = 值# name_dict是字典变量
程序实例:
fruits = {0:'apple', 1:'banana', 2:'orange'}print(fruits)fruits['new_fruit'] = 'watermelon'print("新的fruits字典:",fruits)
执行结果:
{0: 'apple', 1: 'banana', 2: 'orange'}新的fruits字典: {0: 'apple', 1: 'banana', 2: 'orange', 'new_fruit': 'watermelon'}
9.1.4 更改字典元素内容
程序实例:
fruits = {'西瓜':15, '苹果':20, '香蕉':18, '橙子':24}print("苹果涨价前,一斤",fruits['苹果'], "元")fruits['苹果'] = 25print("苹果涨价后,一斤",fruits['苹果'], "元")
执行结果:
苹果涨价前,一斤 20 元苹果涨价后,一斤 25 元
9.1.5 删除字典特定元素
删除字典的特定元素,语法格式如下:
del name_dict[键]
程序实例:
shopping_cart = {'iPhone Plus':3800, 'Mac book':5300, 'Kindle电子书阅读器':688, '蓝牙耳机':150}print("旧的购物车清单:", shopping_cart)del shopping_cart['Kindle电子书阅读器']print("新的购物车清单:", shopping_cart)
执行结果:
旧的购物车清单: {'iPhone Plus': 3800, 'Mac book': 5300, 'Kindle电子书阅读器': 688, '蓝牙耳机': 150}新的购物车清单: {'iPhone Plus': 3800, 'Mac book': 5300, '蓝牙耳机': 150}
9.1.6 删除字典所有元素
使用clear()方法可将字典中的所有元素删除,将字典变成空字典。
程序实例:
shopping_cart = {'iPhone Plus':3800, 'Mac book':5300, 'Kindle电子书阅读器':688, '蓝牙耳机':150}print("旧的购物车清单:", shopping_cart)shopping_cart.clear()print("新的购物车清单:", shopping_cart)
执行结果:
旧的购物车清单: {'iPhone Plus': 3800, 'Mac book': 5300, 'Kindle电子书阅读器': 688, '蓝牙耳机': 150}新的购物车清单: {}
9.1.7 删除字典
使用del指令,可将整个字典删除,字典一经删除就不再存在。它的语法格式如下:
del name_dict # 删除字典name_dict
程序实例:
shopping_cart = {'iPhone Plus':3800, 'Mac book':5300, 'Kindle电子书阅读器':688, '蓝牙耳机':150}print("旧的购物车清单:", shopping_cart)del shopping_cartprint("新的购物车清单:", shopping_cart)
执行结果:
9.1.8 创建空字典
创建空字典的语法如下:
name_dict = {}
程序实例:
season = {} # 创建空字典print("空季节字典",season)season['Spring'] = '春天'season['Summer'] = '夏天'print("新季节字典", season)
执行结果:
空季节字典 {}新季节字典 {'Spring': '春天', 'Summer': '夏天'}
9.1.9 字典的复制
为保护原先字典内容,通常需要将字典复制,此时需要用到copy()方法。复制得到的新字典拥有独立的地址。
new_dict = name_dict.copy # name_dict会被复制到new_dict
程序实例:
fruits = {0:'apple', 1:'banana', 2:'orange', 3:'pear'}cfruits = fruits.copy() # 将fruits字典复制到cfruits# 列出地址及字典元素内容# id()函数可以列出字典所在计算机内存的地址print("地址:", id(fruits), "字典元素:", fruits)print("地址:", id(cfruits), "字典元素:", cfruits)
执行结果:
地址: 1322840295808 字典元素: {0: 'apple', 1: 'banana', 2: 'orange', 3: 'pear'}地址: 1322840687360 字典元素: {0: 'apple', 1: 'banana', 2: 'orange', 3: 'pear'}
9.1.10 取得字典元素数量
使用len()函数可得到字典元素数量,它的语法如下:
length = len(name_list) # 将name_lsit字典的元素数量返回给length
程序实例:
fruits = {'西瓜':15, '香蕉':20, '苹果':18, '橘子':13}noodles = {'牛肉面':20, '刀削面':30, '阳春面':25}empty_dict = {}print("fruits字典元素数量:%d" % len(fruits))print("noodles字典元素数量:%d" % len(noodles))print("empty_dict字典元素数量:%d" % len(empty_dict))
执行结果:
fruits字典元素数量:4noodles字典元素数量:3empty_dict字典元素数量:0
9.1.11 验证元素是否存在
可用下列语法验证元素是否存在。
键 in name_dict# 可验证键元素是否存在
程序实例:
fruits = {'苹果':30, '西瓜':18, '香蕉':15, '橘子':20}key = input("请输入键(key):")value = input("请输入值(value):")if key in fruits:print("%s已在字典中" % key)else:fruits[key] = valueprint("新的fruits字典内容:", fruits)
执行结果:
9.2 遍历字典
9.2.1 遍历字典的键-值
Python提供items()方法,可以取得字典“键:值”配对的元素。通常搭配for循环使用。
for key,value in name_dict.items()
程序实例:
students = {'张三':18, '李四':20, '王五':19, '赵六':17}for name, age in students.items():print("姓名:%s,年龄:%d\n" % (name, age))
执行结果:
由于字典是一个无序的数据结构,Python只会保持“键:值”,而不会关注元素的排列顺序。
9.2.2 遍历字典的键
使用keys()方法可以获取字典的键
内容。
程序实例:
students = {'张三':18, '李四':20, '王五':19, '赵六':17}for name in students.keys():print("姓名:", name)# 省略keys()方法可得到同样的结果for name in students:print("姓名:", name)
执行结果:
姓名: 张三姓名: 李四姓名: 王五姓名: 赵六姓名: 张三姓名: 李四姓名: 王五姓名: 赵六
9.2.3 按键排序与遍历字典
Python的字典功能并不会处理排序,若想要遍历字典的同时列出排序结果,可以使用sorted()方法。
程序实例:
fruits = {'banana':18, 'apple':25, 'orange':28, 'cherry':35, 'pear':24}print("按水果英文首字母正向排序:")for name in sorted(fruits.keys()):print(name)print("按水果英文首字母反向排序:")for name in sorted(fruits.keys(), reverse=True):print(name)
执行结果:
按水果英文首字母正向排序:applebananacherryorangepear按水果英文首字母反向排序:pearorangecherrybananaapple
9.2.4 遍历字典的值
使用values()方法,可以取得字典值列表。
程序实例:
fruits = {'banana':18, 'apple':25, 'orange':28, 'cherry':35, 'pear':24}for price in fruits.values():print(price)
执行结果:
1825283524
9.2.5 按值排序与遍历字典的值
若有一个名为oldDict的字典需要按照字典的值排序,可使用下列的函数方法,返回新的排序结果列表:
newList = sorted(oldDict.items(), key=lambda item:item[1])
得到的新列表newList的元素是元组
,元组内有两个元素,分别是原字典的键
和值
。
程序实例:
fruits = {'banana':18, 'apple':25, 'orange':28, 'cherry':35, 'pear':24}print(fruits)print(max(fruits.values()))# 字典值中的最大值print(min(fruits.values())) # 字典值中的最小值fruitsList = sorted(fruits.items(), key=lambda item:item[1])print(fruitsList)
执行结果:
{'banana': 18, 'apple': 25, 'orange': 28, 'cherry': 35, 'pear': 24}3518[('banana', 18), ('pear', 24), ('apple', 25), ('orange', 28), ('cherry', 35)]
9.3 字典内键的值为列表
字典内键的值为列表时,遍历时需要使用巢状循环和字典的items()方法,其中外层循环取得字典的键,内层循环则是将列表的值拆解。
程序实例:
dict = {'fruits':['apple', 'orange', 'banana'],'sports':['table tennis', 'football', 'basketball'],'numbers':[110, 119, 666, 888]}for dict_key, dict_values in dict.items():print("%s对应的值为:" % dict_key)# 打印键值for value in dict_values:print(" ",value)
执行结果:
fruits对应的值为:appleorangebananasports对应的值为:table tennisfootballbasketballnumbers对应的值为:110119666888
9.4 while循环在字典的应用
程序实例:
menu = {} # 创建空字典add_menu = Truewhile add_menu:staple_food = input("添加主食:")price = input("价格:")# 将输入存入menu字典menu[staple_food] = pricerepeat = input("是否继续添加菜单内容?(y/n)")if repeat != 'y': # 输入的不是y,则离开while循环add_menu = Falseprint("目前菜单内容:")for staple_food, price in menu.items():print(staple_food,"价格:", price)
执行结果:
9.5 字典常用的函数和方法
9.5.1 len()
len()函数可以获得字典元素的个数。
程序实例:
city = {0:'北京', 1:'上海', 2:'南京', 3:'广州', 4:'深圳'}print(city,"元素个数:",len(city))
执行结果:
{0: '北京', 1: '上海', 2: '南京', 3: '广州', 4: '深圳'} 元素个数: 5
9.5.2 get()
使用get()方法可以搜寻字典的键,如果键存在,则返回该键的值,否则返回默认值。其语法格式如下:
ret_value = dict.get(key[,default=none]) # dict为要搜寻的字典
key为要搜寻的键,若找不到key则返回default的值(默认为None)。
程序实例:
fruits = {'apple':18, 'banana':13, 'orange':20}ret_value1 = fruits.get('peach')print("Value = ",ret_value1)ret_value2 = fruits.get('apple')print("Value = ",ret_value2)ret_value3 = fruits.get('pear', 15)print("Value = ",ret_value3)
执行结果:
Value = NoneValue = 18Value = 15
记录”将进酒“中不同字出现的次数:
程序实例:
poem = """君不见,黄河之水天上来,奔流到海不复回。君不见,高堂明镜悲白发,朝如青丝暮成雪!人生得意须尽欢,莫使金樽空对月。天生我材必有用,千金散尽还复来。烹羊宰牛且为乐,会须一饮三百杯。岑夫子,丹丘生,将进酒,杯莫停。与君歌一曲,请君为我倾耳听。钟鼓馔玉不足贵,但愿长醉不复醒。古来圣贤皆寂寞,惟有饮者留其名。陈王昔时宴平乐,斗酒十千恣欢谑。主人何为言少钱,径须沽取对君酌。五花马、千金裘,呼儿将出换美酒,与尔同销万古愁!"""mydict = {}# 创建空字典# 将标点符号用空字符串取代for ch in poem:if ch in ",。!、":poem = poem.replace(ch, '')print("去掉标点符号后的诗:")print(poem)# 将字符串转成列表poem_list = list(poem)print("\n将进酒内容列表:")print(poem_list)# 将列表处理成字典for word in poem_list:if word in mydict: # 检查该字是否已在字典中mydict[word] += 1 # 若存在,其值加1else:mydict[word] = 1 # 不存在则建立键与值print("\n执行结果:")print(mydict)
执行结果:
往期文章:
《Python零基础快乐学习之旅》学习笔记2——认识变量与基本数学运算《Python零基础快乐学习之旅》学习笔记3——Python的基本数据类型《Python零基础快乐学习之旅》学习笔记4——基本输入与输出《Python零基础快乐学习之旅》学习笔记5——程序的流程控制使用if语句《Python零基础快乐学习之旅》学习笔记6——列表(list)《Python零基础快乐学习之旅》学习笔记7——循环设计《Python零基础快乐学习之旅》学习笔记8——元组(tuple)