本章将学习能够将相关信息关联起来的python字典,学习如何访问和修改字典中的信息,演示如何遍历字典中的数据,还将学习储存字典的列表、储存列表的字典和储存字典的字典。
一、使用字典
在python中,字典是一系列键-值对,每个键都与一个值相关联,我们使用键来访问与之相关的值,值可以是任何python对象。字典用放在花括号{}中一系列键-值对表示。键-值之间用冒号隔开,键-值对之间用逗号隔开。
1、访问字典、添加键-值对
要访问字典中得值,可依次指定字典名和放在方括号中的键。字典是一种动态结构,可随意在其中 添加键-值对,再添加键-值对时,可依次指定字典名、用方括号括起的要添加的键和相关的值。有时候会创建一个空的字典来储存用户提供的数据或在编写能生成大量键-值对的代码。
alien_0={'color':'green','points':5}
print(alien_0['color'])
print(alien_0)
alien_0['x_position']=0
alien_0['y_position']=45
print(alien_0)
2、修改字典中的值、删除键-值对
要修改字典中的值,可依次指定字典名、用方括号括起的键、右边为要改变的值(键-值为字符串记得用单引号或双引号)
一个很有趣的例子:对外星人不同移动速度追踪其位置。
# _*_ coding:gb2312 _*_
alien_0={'x_position':0,'y_position':25,'speed':'medium'}
print("Original x_position:"+str(alien_0['x_position']))
# 向右移动外星人
# 据外星人当前速度决定将其移动多远
alien_0['speed']='fast'
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("New x_position:"+str(alien_0['x_position']))
对于字典中不需要的信息,可使用dei语句进行永久删除。使用del语句时,必须指定要删除的字典名和要删除的键,将会删除与之相关的值。
alien_0={'x_position':0,'y_position':25,'speed':'medium'}
print(alien_0)
del alien_0['x_position']
print(alien_0)
3、由类似对象组成的字典
在前面的例子中,字典储存的是一个对象的多种信息,我们也可以使用字典储存多个对象的同一种信息。在使用多行来定义字典时,在输入左花括号后按回车键,在下一行缩进四个空格,指定第一个键-值对,并在后面加上逗号。
定义好字典时,在最后一个键-值对的下一行添加一个右花括号,一个不错的做法是在最后一个键-值对后面也加一个逗号。
favorite_languages={
'ien':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
print("Saran's favorite language is "+
favorite_languages['sarah'].title()+
".")
二、遍历字典
遍历字典的方式:键-值、键、值。
1、遍历所有的键-值对
用一个for循环遍历字典,使用的方法是items(),它返回一个键-值对列表。在遍历字典时,键-值对的返回顺序是随机的,python不会关心键-值对的储存顺序,只跟踪键-值对之间的关联关系。
favorite_languages={
'ien':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
for name,language in favorite_languages.items():
print(name.title()+"'s favorite_language is "+
language.title()+".")
2、遍历字典中所有的键
方法keys()。其实在遍历字典时,会默认遍历所有的键,使用方法keys()会更容易理解。
favorite_languages={
'ien':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
friends=['phil','sarah']
for name in favorite_languages.keys():
print(name.title())
if name in friends:
print(" Hi " + name.title()+
",Isee your favorite language is "+
favorite_languages[name].title()+"!")
如前面所说的遍历字典时获取顺序是不可预测的,想要以特定顺序返回元素,可以在for循环中对返回的键进行排序,可使用函数sorted()。
favorite_languages={
'ien':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
for name in sorted(favorite_languages.keys()):
print(name.title()+",thank you for taking the poll.")
3、遍历字典中所有的值
使用方法values(),它返回一个值列表,而不包括任何键列表。这种方法不考虑是否重复,要剔除重复,可使用集合(set),它和列表一样,但每个元素是独一无二的。
favorite_languages={
'ien':'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、字典列表
alien_0={'color':'green','point':5}
alien_1={'color':'yellow','point':10}
alien_2={'color':'red','point':23}
aliens=[alien_0,alien_1,alien_2]
for alien in aliens:
print(alien)
一个有趣的例子:管理成群结队的外星人,创建一个外星人列表,其中每个外星人都是一个字典,包含有关外星人的各种信息。我们用range()函数产生30个外星人。使用一个切片打印前五个外星人,并将前三个外星人修改为红色,快速和值为15.
# _*_ coding:gb2312 _*_
#创建一个用于储存外星人得空列表
aliens=[]
#创建30个绿色的外星人
for alien_number in range(0,30):
new_alien={'color':'yellow','points':5,'speed':'slow'}
aliens.append(new_alien)
for alien in aliens[0:3]:
if alien['color']=='green':
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[0:5]:
print(alien)
print("....")
#显示创建了多少个外星人
print("Total number of aliens:"+str(len(aliens)))
2、在字典中储存列表
每当需要在字典中将一个键关联多个值时,可以在字典中嵌套列表。
favorite_languages={
'ien':['python','ruby'],
'sarah':['c'],
'edward':['ruby','go'],
'phil':['python','haskell'],
}
for name,languages in favorite_languages.items():
if len(languages)==1:
print("\n"+name.title()+"'s favorite language is:")
else:
print("\n"+name.title()+"'s favorite languages are:")
for language in languages:
print("\t"+language.title())
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())