目录
字典
在python中,字典用放在花括号{}中的一系列键-值对表示。
键-值对是两个相关联的值。指定键时,Python将返回与之相关联的值。键与值之间用冒号分隔,而键-值对之间用逗号分隔。
访问字典中的值
要获取与键相关联的值,可依次指定字典名和放在括号内的键。
alien_0={'color':'green', 'point':5}
print(alien_0['color'])
print('You just earned '+str(alien_0['point'])+' points!')
green
You just earned 5 points.
添加键-值对
要添加键-值对,可依次指定字典名、用方括号括起的键和相关联的值。
alien_0={'color':'green','points':5}
print(alien_0)
alien_0['x_position']=0
alien_0['y_position']=25
print(alien_0)
{'color':'green','points':5}
{'color':'green','points':5, 'y_position':25, 'x_position':0}
注意,键-值对的排列顺序与添加顺序不同。对于字典来说,重要的是键与值之间的关联关系,而非添加顺序。
创建空字典
在使用字典存储用户提供的数据或在编写能自动生成大量键-值对的代码时,通常需要先建立一个空字典。
空字典可以使用一对空的花括号来定义。
alien_0={}
alien_0['color']='green'
alien_0['points']=5
print(alien_0)
{'color':green, 'point':5}
修改字典中的值
通过依次指定字典名,用方括号括起的键以及与该键相关联的新值,可以修改字典中的值。
alien_0={'color':'green'}
print('The alien is '+alien_0['color']+'.')
alien_0['color']='yellow'
print('The alien is '+alien_0['color']+' now.')
The alien is green.
The alien is yellow now.
删除键-值对
使用del语句可以将相应的键-值对彻底删除。使用del语句时,必须指定字典名和要删除的键。
alien_0={'color':'green','points':5}
print(alien_0)
del alien_0['points']
print(alien_0)
{'color':'green','points':5}
{'color':'green'}
由类似对象组成的字典
字典可以用来存储同一对象的多种信息,也可以存储众多对象的同一信息。
favorite_languages={
'jen':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
print("Sarah's favorite language is "+
favorite_languages['sarah'].title()+
'.')
Sarah's favorite language is C.
上面的例子演示,在确定需要使用多行来定义字典时,可以在输入左花括号后按回车键,再在下一行缩进四个空格,指定第一个键-值对,并在它后面加上一个逗号。此后再次按回车键,文本编辑器将自动随后续键-值对,且缩进量与第一个键-值对相同。
定义好字典后,在最后一个键-值对的下一行添加一个右花括号,并缩进四个空格,使其与字典中的键对齐。在最后一个键-值对后面加上一个逗号是一个不错的做法,为以后在下一行添加键-值对做好准备。
上面的示例还演示了将print语句分成多行的方法。单词print较字典名短,因此可以将输出的第一部分紧跟在左括号的后面。选择在合适的地方拆分要打印的内容,并在第一行末尾加上一个拼接运算符(+)。按回车键进入print语句的后续各行,并使用Tab键将它们对齐并缩进一级。指定要打印的所用内容后,在print语句的最后一行末尾加上右括号。
遍历字典
有多种遍历字典的方式:遍历字典的所有键-值对,键或值。
遍历所有键-值对
使用for循环和方法items()来遍历字典。
**user.py**
user_0={
'username':'efermi',
'first':'enrico',
'last':'fermi',
}
for key,value in user_0.items():
print('\nKey:'+key)
print('Value:'+value)
Key:first
Value:enrico
Key:last
Value:fermi
Key:username
Value:efermi
在for循环中声明两个变量,用于存储键-值对中的键-值。这两个变量,可以使用任何名称。在这个实例中,可以根据其涉及的内容对键、值分别命名为name,language。
注意,在遍历字典时,键-值对的返回顺序与存储顺序也不同。
遍历字典中的键
使用for循环和方法keys()遍历字典的键。
favorite_languages={
'jen':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
for name in favorite_languages.keys():
print(name.title())
Jen
Sarah
Edward
Phil
实际上直接使用for name in favorite_languages:,可以得到相同的输出。但是使用示例中的方法会更容易理解。
keys()方法并非只能用于遍历。实际上,它返回一个列表,其中包含字典中的所有键。
if 'erin' not in favorite_languages.keys():
print('Erin, please take our poll!')
Erin, please take our poll!
按顺序遍历字典中的所有键
使用sorted()函数对字典的键进行排序。
for name in sorted(favorite_languages.keys()):
print(name.title()+', thank you for taking the poll!')
Edward, thank you for taking the poll!
Jen, thank you for taking the poll!
Phil, thank you for taking the poll!
Sarah, thank you for taking the poll!
遍历字典中所有的值
使用方法values(),返回一个值的列表。
print('The following languages have been mentioned:')
for language in favorite_languages.values():
print(language.title())
The following languages have been mentioned:
Python
C
Ruby
Python
由以上示例可知,这种做法并没有考虑是否存在重复。接下来,使用集合函数set()可以剔除重复项,得到每个元素都是独一无二的列表。
print('The following languages have been mentioned:')
for language in set(favorite_languages.values()):
print(language.title())
The following languages have been mentioned:
Python
C
Ruby
嵌套
有时需要将一些字典存储在列表中,或将列表作为值存储在字典中,称为嵌套。
字典列表
将字典作为列表的元素。
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("...")
print('Total number of aliens:'+str(len(aliens)))
{'color':'green','points':5,'speed':'slow'}
{'color':'green','points':5,'speed':'slow'}
{'color':'green','points':5,'speed':'slow'}
{'color':'green','points':5,'speed':'slow'}
{'color':'green','points':5,'speed':'slow'}
...
Total number of aliens:30
在上述示例中生成了30个具有相同特征的外星人,但在python看来,每个外星人都是独立的,可以独立地修改每一个外星人。
下面使用for循环和if语句来修改某些外星人的特征。
for alien in aliens[:3]:
if alien['color'] == 'green':
alien['color']='yellow'
alien['speed']='medium'
alien['points']=10
for alien in aliens[:5]:
print(alien)
print('...')
{'color':'yellow','speed':'medium','speed':10}
{'color':'yellow','speed':'medium','speed':10}
{'color':'yellow','speed':'medium','speed':10}
{'color':'green','points':5,'speed':'slow'}
{'color':'green','points':5,'speed':'slow'}
...
在字典中存储列表
将列表作为值存储在字典中。
**favorite_languages.py**
favorite_languages={
'jen':['python','ruby'],
'sarah':['c'],
'edward':['ruby','go'],
'phil':['python','haskell'],
}
for name,languages in favorite_languages.items():
if len(favorite_languages) > 1:
print('\n'+name.title()+"'s favorite languages are:")
for language in languages:
print("\t"+language.title())
elif len(favorite_languages) == 1:
print('\n'+name.title()+"'s favorite language is:")
print(languages.title())
Jen's favorite languages are:
Python
Ruby
Sarah's favorite language is:
C
Edward's favorite languages are:
Ruby
Go
Phil's favorite languages are:
Python
Haskell
在字典中存储字典
可以将字典作为值存储在字典中。但是这样代码可能很快会复杂起来。
**many_users.py**
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())
Username: aeinstein
Full name:Albert Einstein
Location:Princeton
Username: mcurie
Full name:Marie Curie
Location:Paris
注意,在上例中表示每位用户的字典结构都相同,实际上Python并无此要求,但是这样可以使字典处理起来更方便。