字典在功能上有点像C中的结构体
一 一个简单的字典
看一个例子,一个字典中包含了一些外星人,这些外星人颜色和点数各不相同。
alien_0={'color':'green','points':5}
print(alien_0['color'])
print(alien_0['points'])
二 使用字典
在Python中,字典是一系列键-值对。每个键都与一个值相关联,我们可以使用键来访问与之关联的值,与键相关的可以是数字字符串,列表乃至字典。
1.访问字典中的值
可依此指定字典名与放在方括号里的键
alien_0={'color':'green','points':5}
print(alien_0['color'])
也可以取一个中间变量:
alien_0 = {'color': 'green', 'points': 5}
new_points = alien_0['points']
print("You just earned " + str(new_points) + " points!")
2.添加键-值对
字典是一种动态结构,可以随时在其中添加键-值对。
比如,我们需要知道这个外星人的位置:
alien_0={'color':'green','points':5}
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)
输出结果:
{‘color’: ‘green’, ‘points’: 5, ‘x_position’: 0, ‘y_position’: 25}
3.先创建一个空字典
我们可以先创建一个空字典,再分行添加键-值对。如题:
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = '5'
print(alien_0)
输出结果;
{‘color’: ‘green’, ‘points’: ‘5’}
4.修改字典中的值
要修改字典中的值,可知道字典名,用方括号括起来指定的键,并赋予相关联的新值
alien_0={'color':'green','points':5}
print(alien_0)
alien_0['color'] = 'yellow'
print(alien_0)
我们来看更复杂的一个例子:
alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
print("Original x-position: " + str(alien_0['x_position']))
#向右移动外星人
#据外星人的速度决定其移动多远
if alien_0['speed'] == 'slow':
x_increment = 1
elif alien_0['speed'] == 'medium':
x_increment = 2
else:#这个外星人移动的很快
x_increment = 3
alien_0['x_position'] = alien_0['x_position'] + x_increment
print('Now x_position:' + str(alien_0['x_position']))
我们可以通过if语句决定给外星人移动的值
5.删除键-值对
对于字典中不再需要的值,可以使用del语句将相应的值-键彻底删除
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
del alien_0['points']
print(alien_0)
注意:删除掉的值是永久消失了
6.由类似对象组成的字典
字典不仅可以储存一个对象的多种信息,也可以存储不同对象的信息。例题中存储的是不同人喜欢用的编程语言:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("Phili's faorite language is "+favorite_languages['jen'].title())
三 遍历字典
1.遍历所以的键——值对
第一:要编写能遍历字典的for循环,应该要先声明两个变量:一个代表键,一个代表值
注意,这两个变量可以代表任何值
第二: 字典名和方法items()它返回一个键-值列表。接下来for循环将一次将每个值存储在指定的两个变量中。
注意:即便遍历字典时,键-值对的返回顺序也与存储顺序不同。Python不关心键-值对的存储顺序,而只跟踪键和值之间的关联关系。
user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}
for key,value in user_0.items():
print('\nKey',key)
print('\nValue',value)
2.遍历字典中的所有值
在不需要实验字典中的值时,方法key()可以把所有键名打印出来
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in favorite_languages.keys():
print(name.title());
这里有一个稍微复杂些的例子,我们可以在遍历的基础上加一些操作:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
friends = ['jen','phil']
for name in favorite_languages.keys():
print(name.title());
if name in friends:
print(name+"'s favorite language is "+favorite_languages[name].title()+"!")
keys()并非只能用于遍历;实际上,它可以返回一个列表,其中包含了字典中所有的键。
3.按顺序遍历字典中的所有键
通常我们获取字典的元素时,获取顺序是不可预测的。我们可以使用函数sorted()来获得按特定顺序排列列表的副本。
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in sorted(favorite_languages.keys()):
print(name.title() + ", thank you for taking the poll.")
4.遍历字典中的所有值
我们可以使用方法values(),它返回一个值列表,而不包含任何键。
例如:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("The following languages have been mentioned:")
for language in favorite_languages.values():
print(language.title())
当我们的项目具有重复项时,我们可以使用集合set(),每个都取独一无二的值:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("The following languages have been mentioned:")
for language in set(favorite_languages.values()):
print(language.title())
四 嵌套
有时,我们需要将一些列表存储在字典里,或者将一些字典存储在列表里,这就是嵌套。
1.字典列表
我们的allen只能存储一个外星人的信息,无法同时存储三个。此时例题:
alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}
aliens = [alien_0,alien_1,alien_2]
for alien in aliens:
print(alien)
更符合现实的是,外星人不止三个,且每个都是随机生成的。此时:
aliens = []
for alien_number in range(30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
for alien in aliens[:5]:
print(alien)
print("Total number of aliens is "+str(len(aliens)))
假如我们需要把前三个外星人修改成黄色的,速度变成中等,且值为十个点:
aliens = []
for alien_number in range(30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
for alien in aliens[0:3]:#alien是指字典
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['points'] = 10
alien['speed'] = 'medium'
for alien in aliens[0:5]:
print(alien)
print("Total number of aliens is "+str(len(aliens)))
我们可以进一步扩展改程序,比如利用elif把黄色外星人改为红色等等
2.在字典中存储列表
当我们需要将一个键关联到多个关联词时,可以使用到嵌套:
pizzas = {
'crust':'thick',
'toppings':['mushrooms','extra chess']
}
print("you want a"+pizzas['crust']+"-crust pizza")
print("wint toppings:")
for topping in pizzas['toppings']:
print("\t"+topping)
3.在字典中存储字典
比如,我们需要列出几个不同的用户,并存储不同用户的个人信息。此时应该用到字典中存储字典;
users = {
'aeinstein': {
'first': 'albert',
'last': 'einstein',
'location': 'princeton',
},
'mcurie': {
'first': 'marie',
'last': 'curie',
'location': 'paris',
},
}
for username, user_info in users.items():
print("\nUsername: " + username)
full_name = user_info['first'] + " " + user_info['last']
location = user_info['location']
print("\tFull name: " + full_name.title())
print("\tLocation: " + location.title())