Python编程:从入门到实践——第6章、字典(附课后题)

字典 是一系列键—值对,每个键与一个值相关联,可使用键访问对应的值,任何Python对象可用作字典中的值

```
>>> students = {'张三':'男','韩梅梅':'女'}
>>> print(students['张三'])
男
>>> print('韩梅梅:' + students['韩梅梅'])
韩梅梅:女

字典是一种动态结构,经常需要存储用户数据或批量生成,添加键值对方法如下

>>> students = {}
>>> students['张三'] = '男'
>>> students['韩梅梅'] = '女'
>>> print(students)
{'张三': '男', '韩梅梅': '女'}

修改字典值

>>> students = {'韩梅梅': '女'}
>>> print("学生韩梅梅的性别: " + students['韩梅梅'])
学生韩梅梅的性别: 女
>>> students['韩梅梅'] = '男'
>>> print("学生韩梅梅的性别: " + students['韩梅梅'])
学生韩梅梅的性别: 男

#综合编写一个例子:
students_han = {'X坐标':0,'Y坐标':25,'移动速度':'一般'}
print("原来的X坐标:" + str(students_han['X坐标']))
#韩梅梅向右移动
#根据韩梅梅当前速度决定将她移动多远
if students_han['移动速度'] == '很慢':
    x_increment = 1
elif students_han['移动速度'] == '一般':
    x_increment = 2
else:
    #这个韩梅梅同学跑肚速度很快
    x_increment = 3
    #新位置等于老位置加上增量位置
students_han['X坐标'] = students_han['X坐标'] + x_increment
print("新位置X坐标:" + str(students_han['X坐标']))
============== RESTART: C:\Users\Administrator\Desktop\text.py ==============
原来的X坐标:0
新位置X坐标:2
我们首先定义一个学生,该学生包含‘初始X坐标’和‘Y坐标’和‘速度一般’,并先打印出初始值。
使用if-elif-else结构来确定韩梅梅移动距离x_increment,如果韩梅梅速度为很慢,则移动1,速度为一般则移动2,否则移动很快移动3,确定定义了移动量后,将移动距离与与原初始位置相加,并关联到students_han['X坐标']中,相当于修改字典值,因此,结果为移动2个距离。

del 永久删除键值对

>>>alien_0 = {'color': 'green', 'points': 5}
>>>print(alien_0)
>>>del alien_0['points']
>>>print(alien_0)

遍历字典

user_0 = {
    'username':'efermi',
    'first':'enrico',
    'last':'fermi',
    }
for key,value in user_0.items():
    print("\nKey: " + key)
    print("Value:" + value)

只遍历key

for k in user_0.keys():
    print(k)

只遍历value

for v in user_0.values():
    print(v)

遍历字典中,进行if判断,对特殊键值进行处理

方法keys() 并非只能用于遍历;实际上,它返回一个列表,其中包含字典中的所有键

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
friends = {'phil','sarah'}
for name in favorite_languages.keys():
    print(name)
    if name in friends:
        print("Hi " + name.title() + ", I see your favorite language is " + favorite_languages[name].title() + "!")

获取字典时,进行排序获取

favorite_languages = {
    '2jen':'python',
    '1sarah':'c',
    '4edward':'ruby',
    '3phil':'python',
    }
for name in sorted(favorite_languages.keys()):
    print(name.title() + ",thank you for taking the poll!!")

set()字典去重

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
for language in set(favorite_languages.values()):
    print(language)

嵌套

>>> student_0 = {'姓名':'张三','性别':'男','年龄':'12'}
>>> student_1 = {'姓名':'李四','性别':'男','年龄':'15'}
>>> student_2 = {'姓名':'韩梅梅','性别':'女','年龄':'18'}
>>> students = [student_0,student_1,student_2]
>>> for student in students:
    print(student)  
{'姓名': '张三', '性别': '男', '年龄': '12'}
{'姓名': '李四', '性别': '男', '年龄': '15'}
{'姓名': '韩梅梅', '性别': '女', '年龄': '18'}

#现实中某事物数目不止个位数
trees = []#创建存储树的空列表
for tree_number in range(30):#创建30个大树
    new_tree = {'品种':'桑树','来源地':'咸阳','移植地':'甘肃'}
    trees.append(new_tree)

for tree in trees[:5]:#显示前5个大树状态
    print(tree)
print("...")
print("已移植桑树数目:" + str(len(trees)))
#现实中,可能部分大树,品种变化、来源地需要更改、移植需要更改
for extree in trees[2:6]:
    if extree['品种'] == '桑树':
        extree['品种'] = '槐树'
        extree['来源地'] = '北京'
        extree['移植地'] = '辽宁'

#显示前10个大树状态
for tree in trees[:10]:
    print(tree)
print("*******")

字典中存储列表

clothes = {
    '类型':'T恤',
    '样式':['圆领','纯白']
    }
print("你买的" + clothes['类型'] + '样式:')
for type in clothes['样式']:
    print("\t" + type)

favorite_languages = {
    '张三':['python'],
    '李四':['java','c'],
    '韩梅梅':['python','go']
    }
for name,languages in favorite_languages.items():
    if len(languages) == 1:#改进这个程序,如果只有一种,就相应修改输出的措辞
        for language in languages:
            print(name.title() + "只喜欢:" + language.title())

    else:
        print("\n" + name.title() + "最喜欢的语言是:")
        for language in languages:
            if language != 1:
                print("\t" + language.title())

字典中存储字典

users = {
    '张三':{
        '性别':'男',
        '年龄':'26',
        '住址':'上海',
        },
    '韩梅梅':{
        '性别':'女',
        '年龄':'23',
        '住址':'北京',
        },
    }
for username,user_info in users.items():
    print("\n用户姓名:" + username)
    sex = user_info['性别']
    age_location = user_info['年龄'] + " " + user_info['住址']
    print("性别:" + "\t" + sex)
    print("年龄和住址:"  +  age_location)

练习题

#6-1
#人 :使用一个字典来存储一个熟人的信息,包括名、姓、年龄和居住的城市。该字典应包含键first_name 、last_name 、age 和#city 。将存储在该字典中
#的每项信息都打印出来
friends = {'first_name':'张','last_name':'三','age':'26','city':'北京'}
print(friends)
for key,value in friends.items():
    print('key:'+ key)
    print('value:' + value+'\n')
#6-2
#喜欢的数字:使用一个字典来存储一些人喜欢的数字。请想出5个人的名字,并将这些名字用作字典中的键;想出每个人喜欢的一个数
#字,并将这些数字作为值存
#储在字典中。打印每个人的名字和喜欢的数字。为让这个程序更有趣,通过询问朋友确保数据是真实的。
like_nums = {'张三':1,'李四':3,'王五':0,'韩梅梅':3,'李华':0}
for key,value in like_nums.items():
    print(key + '喜欢的数字:' + str(value))
#6-3
#词汇表 :Python字典可用于模拟现实生活中的字典,但为避免混淆,我们将后者称为词汇表。
#想出你在前面学过的5个编程词汇,将它们用作词汇表中的键,并将它们的含义作为值存储在词汇表中。
#以整洁的方式打印每个词汇及其含义。为此,你可以先打印词汇,在它后面加上一个冒号,再打印词汇的含义;也可在一行打印词汇,再使用换行符(\n )插
#入一个空行,然后在下一行以缩进的方式打印词汇的含义。
dics = {'list':'列表','var':'变量','int':'整型','boolean':'布尔','str':'字符串'}  
print('dics[\'list\']'+':' + dics['list'])  
print('dics[\'var\']'+':' + dics['var'])  
print('dics[\'int\']'+':' + dics['int'])  
print('dics[\'boolean\']'+':' + dics['boolean'])  
print('dics[\'str\']'+':' + dics['str'])  
#6-4
#词汇表2 :既然你知道了如何遍历字典,现在请整理你为完成练习6-3而编写的代码,将其中的一系列print 语句替换为一个遍历字典中的键和值的循环。确定该
#循环正确无误后,再在词汇表中添加5个Python术语。当你再次运行这个程序时,这些新术语及其含义将自动包含在输出中
dicts = {'int':'整型','str':'字符串','boolean':'布尔值','var':'变量','list':'列表'}
dicts ['shorted'] = '排序'
dicts['break'] = '跳出'
dicts['del'] = '删除'
dicts['if'] = '如果'
dicts['for'] = '循环'
for k,v in dicts.items():
    print(k + ':' + v)
#6-5
#河流 :创建一个字典,在其中存储三条大河流及其流经的国家。其中一个键—值对可能是'nile': 'egypt' 。
#使用循环为每条河流打印一条消息,如“The Nile runs through Egypt.”。
#使用循环将该字典中每条河流的名字都打印出来。
#使用循环将该字典包含的每个国家的名字都打印出来。
rivers = {
    'nile':'egypt',
    'changjiang':'china',
    'huanghe':'china',
    }
for k,v in rivers.items():
    print("The " + k.title() + "runs through " + v.title() + '.\n')

for k in rivers.keys():
    print(k)

for v in rivers.values():
    print(v)
#6-6
#调查 :在6.3.1节编写的程序favorite_languages.py中执行以下操作。
#创建一个应该会接受调查的人员名单,其中有些人已包含在字典中,而其他人未包含在字典中。
#遍历这个人员名单,对于已参与调查的人,打印一条消息表示感谢。对于还未参与调查的人,打印一条消息邀请他参与调查。
favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }

surver_persons = ['张三','李四','jen',]

for k in favorite_languages.keys():
    if k in surver_persons:
        print("非常感谢" + k + "参加问卷调查.\n")
    else:
        print("请" + k + "参加问卷调查.\n")
#6-7
#在为完成练习6-1而编写的程序中,再创建两个表示人的字典,然后将这三个字典都存储在一个名为people 的列表中。遍历这个列表,将其中每个人的所有
#信息都打印出来
friend_0 = {'姓名':'张三','年龄':'26','城市':'北京'}
friend_1 = {'姓名':'李四','年龄':'23','城市':'上海'}
friend_2 = {'姓名':'韩梅梅','年龄':'28','城市':'云南'}
people = [friend_0,friend_1,friend_2]
for pop in people:
    print("\n最好的朋友:")
    for friend_key,friend_value in pop.items():
        print("\t" + friend_key + ":"+ friend_value)
#6-8
#宠物 :创建多个字典,对于每个字典,都使用一个宠物的名称来给它命名;在每个字典中,包含宠物的类型及其主人的名字。将这些字典存储在一个名为pets
#的列表中,再遍历该列表,并将宠物的所有信息都打印出来。
dog = {'类型':'大黄狗','主人名':'张三'}
cat = {'类型':'小花猫','主人名':'李四'}
pig = {'类型':'宠物猪','主人名':'张三'}
pets = [pig,cat,dog]
print("有以下"+ str(len(pets)) +"种宠物")
for pet in pets:
        print(pet)
#6-9
#喜欢的地方 :创建一个名为favorite_places 的字典。在这个字典中,将三个人的名字用作键;对于其中的每个人,都存储他喜欢的1~3个地方。为让这个练
#习更有趣些,可让一些朋友指出他们喜欢的几个地方。遍历这个字典,并将其中每个人的名字及其喜欢的地方打印出来。
favorite_places = {
    '张三':['北京'],
    '李四':['上海','芜湖','兰州'],
    '韩梅梅':['苏州','西安'],
    }
lists = []
for key,values in favorite_places.items():
    if len(values) == 1:
        for value in values:
            print(key + "只喜欢的城市是:" + value)
    else:
        print("\n" + key + "喜欢的城市有:")
        for value in values:
            if value !=1:
                print("\t" + value)
#6-10
#喜欢的数字 :修改为完成练习6-2而编写的程序,让每个人都可以有多个喜欢的数字,然后将每个人的名字及其喜欢的数字打印出来。
like_nums = {
    '张三':[1,2,4,5],
    '李四':[4,0,7,10],
    '王五':[7,9,12,38],
    '韩梅梅':[78,23,45,31],
    }
for key,value in like_nums.items():
    print(key + '喜欢的数字:')
    for num in value:
        print(str(num))
#6-11
#城市 :创建一个名为cities 的字典,其中将三个城市名用作键;对于每座城市,都创建一个字典,并在其中包含该城市所属的国家、人口约数以及一个有关该
#城市的事实。在表示每座城市的字典中,应包含country 、population 和fact 等键。将每座城市的名字以及有关它们的信息都打印出来。
cities = {
    '西安':{'country':'中国','population':'1000万人','fact':'历史悠久'},
    '莫斯科':{'country':'俄罗斯','population':'500万人','fact':'爱喝酒'},
    '首尔':{'country':'韩国','population':'200万人','fact':'现代大都市'},
    }
print('介绍三个城市的信息:')
for citi_key,citi_value in cities.items():
    print('“' + citi_key + '”' + '的信息:')
    for info_key,info_value in citi_value.items():
        print('\t' + info_key + ':' + info_value)
    print('\n')

猜你喜欢

转载自blog.csdn.net/github_35707894/article/details/80455001