元组的使用、字典的使用、字典的遍历与嵌套python例题实操训练

本节主要目标是让读者学习和掌握Python中元组和字典的基本知识,主要内容包括四个部分:元组的使用、字典的使用、字典的遍历与嵌套。

一、关于元组与字典

元组和字典是类似于列表的数据类型。元组用圆括号“)”标识,内部元素用逗号隔开,元组中的元素不能二次赋值,相当于只读列表。字典用大括号“{}”表示,由索引(key)和它对应的值(value)组成。字典和列表的区别在于字典当中的元素是通过键来存取的,而列表是通过偏移存取的。

相关知识

一、基本知识

1、元组与列表

元组与列表很相似,两者之间的差别在于,列表在初始化后其中的元素还可以进行增删改等操作,但是元组在初始化后其中的元素不能进行更改,列表在赋值时使用方括号[],而元组在赋值时使用小括号()。因为元组具有不可变的特性,所以在能用元组替代列表的地方最好都使用元组,这样代码更安全。

2、创建元组

元组创建很简单,只需要在括号()中添加元素,元素之间用逗号隔开。元组中只包含单个元素时,需要在该元素后面添加逗号,例如:

menu1 = ('meat','fish','chicken')
menu2 = ('meat',)

3、访问元组

元组和列表一样,可以使用下标索引来访问元组中的值,例如:

  1. menu = ('meat','fish','chicken','carrot')
  2. print(menu[0])
  3. print(menu[1:3])

输出结果:

meat
('fish', 'chicken')

4、修改元组

元组中的元素值是不可以修改的,如果强行修改会报错,例如如果我们想修改元组menu中的某个值:

  1. menu = ('meat','fish','chicken','carrot')
  2. menu[0] = 'pizza'
  3. print(menu[0])

输出结果:

TypeError: 'tuple' object does not support item assignment

系统会自动报错,元组中的元素值不支持修改。

5、元组内置函数

元组和列表一样,都有一些内置函数方便编程。例如:

len(tuple):计算元组中元素个数。

max(tuple):返回元组中元素的最大值。

min(tuple):返回元组中元素的最小值。

tuple(seq):将列表转换为元组。

元组中的元素是不能改变的,它也没有append()insert()这样的方法。但其他获取元素的方法和列表是一样的。

二、常规操作

1.将字符串转换为列表

用 str.split()函数:用参数指定的字符作为分隔符,将字符串拆分为列表
比如,s = 'ab,cd,e'
list1 = s.split(',')
结果: list1列表为 ['ab','cd','e']

2.字典的定义

用{} 或 dict() 函数

3. 如何遍历列表

用for 循环,比如
for s in list1:
print(s)
输出:
ab
cd
e

4.字典元素的添加、修改

dicta[key] = value
将键为key的键值修改为value,当键为key的元素不在字典中时,则添加一个元素(key:value)

5.字典的遍历

与列表一样,用for循环
for i in dicta:
print(i,':',dicta[i]) #输出每个键值对

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

d = { key1 : value1, key2 : value2 }

每个键都与一个值相关联,我们可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。

6、访问字典中的值

要获取与相关联的值,可依次指定字典名和放在方括号内的键,如下所示:

  1. # 创建并初始化menu字典
  2. menu = {'fish':40, 'pork':30, 'potato':15, 'noodles':10}
  3. # 获取并返回menu字典中键'fish'键对应的值
  4. print(menu['fish'])

输出结果:
40

7、添加键-值对

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

下面在字典menu中添加两道菜的菜名和价格:

  1. # 创建并初始化menu字典
  2. menu = {'fish':40, 'pork':30, 'potato':15, 'noodles':10}
  3. # 向menu字典中添加菜名和价格
  4. menu['juice'] = 12
  5. menu['egg'] = 5
  6. #输出新的menu
  7. print(menu)

输出结果:
{'fish': 40,'pork': 30,'potato': 15,'noodles': 10, 'juice': 12,'egg': 5}

新的menu字典包含6个键-值对,新增加的两个键-值对(菜名和对应价格)添加在了原有键-值对的后面,注意字典中键-值对的排列顺序和添加顺序没有必然联系,Python不关心字典中键-值对的排列顺序,而只关心键与值得对应关系。

同理,字典和列表一样,可以先创建一个空字典,然后可以不断向里面添加新的键-值对。

8、修改字典中的值

字典和列表一样,里面的值都是可以修改的。要修改字典中的值,可直接指定字典中的键所对应的新值。例如,将menu中的fish价格改为50

  1. # 创建并初始化menu字典
  2. menu = {'fish':40, 'pork':30, 'potato':15, 'noodles':10}
  3. # 修改menu字典中菜fish的价格
  4. menu['fish'] = 50
  5. # 打印输出新的menu
  6. print(menu)

输出结果:
{'fish': 50, 'pork': 30, 'potato': 15, 'noodles': 10}

9、删除键-值对

我们可以通过del方法删除字典中不需要的键-值对,使用del方法时,要指定字典名和要删除的键。

例如,在menu菜单中删除键noodles和它的值。

  1. # 创建并初始化menu字典
  2. menu = {'fish':40, 'pork':30, 'potato':15, 'noodles':10}
  3. # 删除noodles键值对
  4. del menu['noodles']
  5. # 打印输出新的menu
  6. print(menu)

输出结果:
{'fish': 40, 'pork': 30, 'potato': 15}

10、遍历字典中的键-值对

Python为字典类型提供了items()方法,items()方法会将字典里的所有的键与值一起返回,

例如,餐馆有一个菜单包含了菜名和价格信息。菜名和价格顾客都需要知道,可以通过遍历输出menu字典的键和值来实现。

  1. #coding = utf-8
  2. # 创建并初始化menu菜单字典
  3. menu={'fish':'40','pork':'30','potato':'20','lamb':'50'}
  4. # 利用items()方法遍历输出键和值
  5. for key,value in menu.items():
  6. print('\nkey:'+key)
  7. print('value:'+value)

输出结果:

  1. key:fish
  2. value:40
  3. key:pork
  4. value:30
  5. key:potato
  6. value:20
  7. key:lamb
  8. value:50

输出结果表示,items()方法每次都将对应的键和值指定到keyvalue变量中,然后用for循环输出。

11、遍历字典中的键

对于餐馆中的厨师来说,他们并不想要知道菜的价格,只需要知道菜名然后将其做出来就行。所以对于厨师来说,我们需要遍历menu字典中的所有菜名。

Python为字典类型内置了keys()方法,该方法会将字典里的遍历出来,例如:

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

输出结果:
food_name:fish
food_name:pork
food_name:potato
food_name:lamb

输出结果表示,keys()方法每次都是将menu菜单中的输出,显示菜名。

12、遍历字典中的值

对于餐馆中的收银员来说,他们可能并不想知道菜单的菜名,只需要知道菜的价格然后收账即可。所以对于收银员来说,我们需要遍历menu字典中的所有菜的价格。

Python为字典类型内置了values()方法,该方法会将字典里的值遍历出来,例如:

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

输出结果:
food_price:40
food_price:30
food_price:20
food_price:50

输出结果表示,values()方法每次都是将menu菜单中的输出,显示菜的价格。

13、列表中存储字典

餐馆中已经有了3份菜单,每份菜单都会有菜名和价格,我们要将这些信息存储在一起,可以采取如下方法。

3份菜单用字典的方式存储菜名和价格,然后将这3份菜单字典存储在一个列表中,例如:

  1. # 创建3个菜单字典,包含菜名和价格
  2. menu1 = {'fish':40, 'pork':30, 'potato':20,'noodles':15}
  3. menu2 = {'chicken':30, 'corn':55, 'lamb':65,'onion':12}
  4. menu3 = {'bacon':36, 'beaf':48, 'crab':72,'eggs':7}
  5. # 将3个菜单字典存储到列表menu_total中
  6. menu_total = [menu1,menu2,menu3]
  7. # 输出列表
  8. 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}]

14、字典中存储列表

我们也可以在字典中存储列表,比如我们对于一份菜单,菜名作为键,而值我们想是这道菜的配料,那么我们就可以将这些配料作为列表存储,然后作为值存储在字典中。例如:

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

输出结果:

The burding of pork is: ['sugar', 'wine']

15、字典中存储字典

我们也可以在字典中存储字典,例如我们有一份总菜单,包含2个子菜单,每个子菜单都包含菜名和价格。例如:

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

输出结果:

{'fish': 40, 'pork': 30, 'potato': 20, 'noodles': 15}
{'chicken': 30, 'corn': 55, 'lamb': 65, 'onion': 12}

如果您想了解更多有关列表使用知识,请参考:【美】Eric Matthes著《Python编程——从入门到实践》第六章

下面是五个练习题附参考题解:

例1:

补全src/Step1/menu_test.py文件的代码内容,实现如下功能:

  • 将输入的菜单menu_list转换为元组类型

  • 打印输出生成的元组

  • 打印输出元组中首字母最大的元素

本关涉及的代码文件src/Step1/menu_test.py的代码框架如下:

  1. # coding=utf-8
  2. # 创建并初始化munu_list列表
  3. menu_list = []
  4. while True:
  5. try:
  6. food = input()
  7. menu_list.append(food)
  8. except:
  9. break
  10. # 请在此添加代码,对menu_list进行元组转换以及元组计算等操作,并打印输出元组及元组最大的元素
  11. ###### Begin ######
  12. ####### End #######
# coding=utf-8

# 创建并初始化menu_list列表
menu_list = []
while True:
    try:
        food = input()
        menu_list.append(food)
        if food=="":
            break
    except:
        break

# 请在此添加代码,对menu_list进行元组转换以及元组计算等操作,并打印输出元组及元组最大的元素
###### Begin ######
print(tuple(menu_list))
print(max(tuple(menu_list)))


#######  End #######

建议自测集:

测试输入:
pizza  
chicken  
carrot  
turkey  
banana  
预期输出:  
('pizza', 'chicken', 'carrot', 'turkey', 'banana')  
turkey  

例2:

补全src/Step2/menu.py文件的代码,实现相应的功能。具体要求如下:

  • menu_dict字典中添加一道菜名lamb,它的价格是50

  • 获取menu_dict字典中的fish的价格并打印出来;

  • menu_dict字典中的fish的价格改为100

  • 删除menu_dict字典中noodles这道菜;

  • 输出新的menu_dict菜单。

本关涉及的代码文件src/Step2/menu.py的代码框架如下:

  1. # coding=utf-8
  2. # 创建并初始化munu_dict字典
  3. menu_dict = {}
  4. while True:
  5. try:
  6. food = input()
  7. price = int(input())
  8. menu_dict[food]= price
  9. except:
  10. break
  11. #请在此添加代码,实现对menu_dict的添加、查找、修改等操作,并打印输出相应的值
  12. ###### Begin ######
  13. ####### End #######
# coding=utf-8

# 创建并初始化menu_dict字典
menu_dict = {}
while True:
    try:
        food = input()
        price = int(input())
        menu_dict[food]= price
    except:
        break

#请在此添加代码,实现对menu_dict的添加、查找、修改等操作,并打印输出相应的值
###### Begin ######
menu_dict["lamb"]=50

print(menu_dict.get('fish'))
menu_dict["fish"]=100
del menu_dict['noodles']
print(menu_dict)


#######  End #######

建议测试集:

测试输入:  
pizza  
40  
noodles  
30  
carrot  
20  
turkey  
34  
fish  
37  
预期输出:  
37  
{'pizza': 40, 'carrot': 20, 'turkey': 34, 'fish': 100, 'lamb': 50}

 例3:

补全src/Step3/key-values.py文件的代码,实现相应的功能。具体要求如下:

  • menu_dict菜单的键遍历输出;

  • menu_dict菜单的值遍历输出;

本关涉及的代码文件src/Step3/key_values.py的代码框架如下:

  1. # coding=utf-8
  2. # 创建并初始化munu_dict字典
  3. menu_dict = {}
  4. while True:
  5. try:
  6. food = input()
  7. price = int(input())
  8. menu_dict[food]= price
  9. except:
  10. break
  11. #请在此添加代码,实现对menu_dict的遍历操作并打印输出键与值
  12. ###### Begin ######
  13. ####### End #######
# coding=utf-8
# 创建并初始化menu_dict字典
menu_dict = {}
while True:
    try:
        food = input()
        price = int(input())
        menu_dict[food]= price
    except:
        break
#请在此添加代码,实现对menu_dict的遍历操作并打印输出键与值
###### Begin ######
for i in menu_dict.keys():
    print(i)
for w in menu_dict.values():
    print(w)

#######  End #######

建议测试集:

测试输入:  
Spring Rolls  
40  
pork  
30  
Fried Wonton  
15  
预期输出:  
Spring Rolls  
pork  
Fried Wonton  
40  
30  
15  

 例4:

补全src/Step4/menu_nest.py文件的代码,实现相应的功能。具体要求如下:

  • menu_total列表中初始时只包含menu1字典,menu1字典中包含两道菜和两道菜的价格;

  • 编程要求是向menu_total列表中添加另外一个菜单字典menu2menu2菜单中的菜名和menu1菜单一样,菜的价格是menu1菜的价格的2倍;

  • 输出新的menu_total列表。

本关涉及的代码文件src/Step4/menu_nest.py的代码框架如下:

  1. # coding=utf-8
  2. # 初始化menu1字典,输入两道菜的价格
  3. menu1 = {}
  4. menu1['fish']=input()
  5. menu1['pork']=input()
  6. # menu_total列表现在只包含menu1字典
  7. menu_total = [menu1]
  8. # 请在此添加代码,实现编程要求
  9. ###### Begin ######
  10. ###### End ######
  11. # 输出menu_total列表
  12. print(menu_total)
#coding=utf-8
#初始化menu1字典,输入两道菜的价格
menu1 = {}
a=menu1['fish']=int(input())
b=menu1['pork']=int(input())
#menu_total列表现在只包含menu1字典
menu_total = [menu1]
# 请在此添加代码,实现编程要求
#********** Begin *********#
menu2 = {}
menu2['fish']=a*2
menu2['pork']=b*2
menu_total = [menu1,menu2]
#********** End **********#
#输出menu_total列表
print(menu_total)



 参考测试集:

测试输入:
40
30
预期输出:
[{'fish': 40, 'pork': 30}, {'fish': 80, 'pork': 60}]

 例5:

根据提示,在右侧编辑器补充代码 。

###### 统计投票结果,请在下面标注序号的位置添加程序 #####

#输入一行姓名,用空格分隔

nameStr = input()

#(1)将字符串转换为列表nameList,每个姓名为一个元素

#(2)创建一个空字典 count

#(3)统计列表中每个姓名出现的次数,用字典表示(name:num)

#输出统计结果,每行输出一个: 姓名:票数

###### 程序结束#####

###### 统计投票结果,请在下面标注序号的位置添加程序 #####
#输入一行姓名,用空格分隔
nameStr = input()

#(1)将字符串转换为列表nameList,每个姓名为一个元素
n=nameStr.split()
print(n)
#(2)创建一个空字典 count
count={}
for i in n:
    count[i]=count.get(i,0)+1

#(3)统计列表中每个姓名出现的次数,用字典表示(name:num)
ppp={}
word=count.keys()
for w in word:
    ppp[w]=ppp.get(w,0)+1

#输出统计结果,每行输出一个: 姓名:票数
for item in count:
    print('%s:%d'%(item,count[item]))
    
###### 程序结束#####

 参考测试集:

测试输入:王海 刘美含 李丽滢 王海 韩强 刘美含 康洋 王海;
预期输出:
['王海', '刘美含', '李丽滢', '王海', '韩强', '刘美含', '康洋', '王海']
王海:3
刘美含:2
李丽滢:1
韩强:1
康洋:1

   提示:
    统计结果用字典表示:姓名:票数
    统计过程中,将列表中的每个姓名添加到字典中。 

开始你的任务吧,祝你成功!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

醉蕤

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

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

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

打赏作者

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

抵扣说明:

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

余额充值