字典 是一系列键—值对,每个键与一个值相关联,可使用键访问对应的值,任何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')