《Python零基础快乐学习之旅》学习笔记9——字典(dict)

第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}  # 定义字典heroes
print(heroes)   # 打印字典内容
print("字典heroes的数据类型为:", type(heroes))

执行结果:

{'疾风剑豪': 6300, '盲僧': 4800, '沙漠死神': 3150, '熔岩巨兽': 1350, '圣锤之毅': 450}
字典heroes的数据类型为: <class 'dict'>

9.1.2 列出字典元素的值

字典的元素是以“键:值”配对设置,要取得元素的值,可以将键作为索引,使用字典变量名称[‘键’]的方式获取。

程序实例:

heroes = {'疾风剑豪':6300, '盲僧':4800, '沙漠死神':3150, '熔岩巨兽':1350, '圣锤之毅':450}  # 定义字典heroes
print("盲僧的价格为:", 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['苹果'] = 25
print("苹果涨价后,一斤",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_cart
print("新的购物车清单:", 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字典元素数量:4
noodles字典元素数量:3
empty_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] = value
    print("新的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)

执行结果:

按水果英文首字母正向排序:
apple
banana
cherry
orange
pear
按水果英文首字母反向排序:
pear
orange
cherry
banana
apple

9.2.4 遍历字典的值

使用values() 方法,可以取得字典值列表。

程序实例:

fruits = {'banana':18, 'apple':25, 'orange':28, 'cherry':35, 'pear':24}
for price in fruits.values():
    print(price)

执行结果:

18
25
28
35
24

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}
35
18
[('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对应的值为:
  apple
  orange
  banana
sports对应的值为:
  table tennis
  football
  basketball
numbers对应的值为:
  110
  119
  666
  888

9.4 while循环在字典的应用

程序实例:

menu = {} # 创建空字典
add_menu = True
while add_menu:
    staple_food = input("添加主食:")
    price = input("价格:")
    # 将输入存入menu字典
    menu[staple_food] = price
    repeat = input("是否继续添加菜单内容?(y/n)")
    if repeat != 'y':   # 输入的不是y,则离开while循环
        add_menu = False

print("目前菜单内容:")
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 =  None
Value =  18
Value =  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 # 若存在,其值加1
    else:
        mydict[word] = 1 # 不存在则建立键与值
print("\n执行结果:")
print(mydict)

执行结果:
在这里插入图片描述


往期文章:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里逆天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值