一、使用字典
在python中,字典是一系列键-值对,可以使用键来获得相关联的值。
1.访问字典中的值
alien_0 = {'color':'green','points':5} #定义一个字典
print(alien_0['color'])
new_points = alien_0['points'] #获取相关值并存储在一个变量中
print("You just earned " + str(new_points) + " points!") #访问变量
2.添加键值对
alien_0 = {'color':'green','points':5}
print(alien_0)
alien_0['x_position'] = 0 #添加新的键-值对,并赋值
alien_0['y_position'] = 25
print(alien_0) #python不关心键值对打印顺序,只关注键值对之间的关联
3.创建一个空字典&修改字典中的值
alien_0 = {} #有时候为方便起见,先创建一个空字典
alien_0['color'] = 'green' #将键值对添加进字典
alien_0['points'] = 5
print(alien_0)
print("\nThe color of alien_0 is " + alien_0['color'])
alien_0['color'] = 'yellow' #将键关联的值修改为yellow
print("But now the color of alien_0 is " + alien_0['color'])
4.修改字典值的应用
#通过修改外星人字典的值,移动外星人的位置
alien_0 = {'x_position':0 ,'y_position':25 ,'speed':'medium'}
print("Original x-position is " + str(alien_0['x_position']))
if alien_0['speed'] == 'slow':
x_increnment = 1
elif alien_0['speed'] == 'medium':
x_increnment = 2
elif alien_0['speed'] == 'fast':
x_increnment = 3
alien_0['x_position'] = alien_0['x_position'] + x_increnment
print("New alien_0's x-position is " + str(alien_0['x_position']))
alien_0['speed'] = 'fast' #通过修改外星人字典的值,修改外星人的移动位置
print("\nNew alien_0's speed is " + str(alien_0['speed']) +
", and the x-position is " +str(alien_0['x_position']))
5.删除字典键值对
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(favorite_languages)
print("Sarah's favorite language is " + favorite_languages['sarah'].title() + ".")
二、遍历字典
1.遍历所有键-值对
user_0 = {
'username': 'efermi',
'first':'enrico',
'last': 'fermi'
}
for key,value in user_0.items(): #声明两个变量,用于存储键—值对中的键和值,item()方法把字典中每对key和value组成一个元组,并把这些元组放在列表中返回。
print("\nkey: " + key ) #for循环依次将指定键值对赋到变量并输出
print("value:" + value) #Python不关心键—值对的存储顺序,而只跟踪键和值之间的关联关系
2.遍历字典上的所有键
在不需要使用字典值的时候,可以使用方法.keys()
遍历字典时默认遍历所有的键
favorite_languages = {
'jen': 'python',
'sarah':'c',
'edward':'ruby',
'phil':'python'
} #字典存储每个人喜爱的语言
friends = ['phil','sarah']
for name in favorite_languages.keys():
print(name.title())
if name in friends:
print("\n Hi " + name.title() + ", I see your favorite language is "
+ favorite_languages[name].title())
3.按顺序遍历字典中所有的键
字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。可使用函数sorted()来获得按特定顺序排列的键列表的副本:
favorite_languages = {
'jen': 'python',
'sarah':'c',
'edward':'ruby',
'phil':'python'
} #字典存储每个人喜爱的语言
for name in sorted(favorite_languages.keys()): #sorted()获得按特定顺序排列的字典,
.keys为遍历所有的键不使用值
print(name.title() + ",thank you for taking the pall !")
4.遍历字典中所有的值
如果感兴趣的主要是字典包含的值,可使用方法values(),它返回一个值列表,而不包含任何键。
favorite_languages = {
'jen': 'python',
'sarah':'c',
'edward':'ruby',
'phil':'python'
} #字典存储每个人喜爱的语言
print("The following languages have been mentioned:\n")
for language in favorite_languages.values(): #提取字典中的每个值,并将它们依次存储到变量language中
print(language.title()) #这种做法提取字典中所有的值,而没有考虑是否重复。
#为剔除重复项,可使用集合(set)
#通过对包含重复元素的列表调用set(),
#可让Python找出列表中独一无二的元素,并使用这些元素来创建一个集合。
print("\n")
for language1 in set(favorite_languages.values()):
print(language1.title())
四、嵌套
有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。
1.在列表中存储字典
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): #用range()创建30个绿色的外星人
new_alien = {'clolr':'green','points':5,'speed':'slow'}
aliens.append(new_alien)
#显示前五个外星人
for alien in aliens[:5]: #显示前五个外星人
print(alien)
print("……")
#显示创建了多少个外星人
print("Total number of aliens is :" + str(len(aliens)))
aliens = [] #创建了一个空列表,用于存储接下来将创建的所有外星人
for alien_number in range(30): #用range()创建30个绿色的外星人
new_alien = {'color':'green','points':5,'speed':'slow'}
aliens.append(new_alien)
#显示创建了多少个外星人
print("Total number of aliens is :" + str(len(aliens)))
#将前三个外星人修改为黄色的、速度为中等且值10个点
for alien in aliens[:3]:
if alien['color'] == 'green': #们编写了一条if语句来确保只修改绿色外星人
alien['color'] = 'yellow'
alien['speed'] = 'medium'
alien['points'] = '10'
elif alien['color'] == 'yellow':
alien['color'] = 'red'
alien['speed'] = 'fast'
alien['points'] = 15
for alien in aliens[:5]: #输出前五个外星人
print(alien)
print("\n")
2.在字典中存储列表
每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。
#首先创建了一个字典,其中存储了有关顾客所点比萨的信息
pizza = {
'crust':'thick',
'toppings':['mushrooms','extra cheese']
}
#概述所点披萨
print("You ordered a " + pizza['crust'] + "-crust pizza" +
"with the following toppings:")
for topping in pizza['toppings']: #为访问配料列表,我们使用了键'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())