字典
介绍
Python字典可以把相关信息都关联起来。
本章将学习如何遍历字典,存储字典的列表,存储列表的字典和存储字典的字典。
一个简单的字典
存储外星人信息的字典。
alien_0{'color':'green','points':5}
print(alien_0['color'])
print(alien_0['points'])
使用字典
字典是一系列的键值对。每个键都与一个值关联,你可以使用键值来访问与之相关联的值。与
键相关联的值可以是数字,字符串,列表乃至字典。事实上,可以将任何Python对象作为字典中的值。
访问字典中的值
要获取与键对应的值,可依次指定字典名和放在方括号内的键。
alien_0={'color':'green'}
print(alien_0['color'])
添加键值对
字典是一种动态结构,可随时在其中添加键值对。
alien_0={'color':'green','points':5}
alien_0['x_position']=0
alien_0['y_position']=25
print(alien_0)
注意:键值对的排列顺序和添加顺序不同,Python不关心键值对的添加顺序,而只关心键和值之间的关联关系。
创建一个空字典
alien_0{}
alien_0['color']='green'
alien_0['points']=5
print(alien_0)
修改字典中的值
可依次指定字典名,用方括号括起的键及与该键相关联的新值。
alien_0{'color':'green'}
alien_0['color']='yellow'
print(alien_0)
删除键值对
对于字典中不再需要的信息,可以使用del语句将对应得键值对彻底删除。使用del时必须指定字典名和键。
alien_0{'color':'green','points':5}
print(alien_0)
del alien_0['points']
print(alien_0)
由类似对象组成的字典
favorite_language={
'jen':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
遍历字典
遍历字典的方式:遍历字典的所有键值对,键或值。
遍历键值对
user_0{
'username':'efermi',
'first':'enrico',
'last':'fermi',
}
for key, value in user_0.items():
print("\nkey:"+key)
print("value:"+value)
favorite_languages ={
'jen':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
for name, language in favorite_languages.items():
print(name.title()+"'s favorite language is"+language.title()+".")
提示:方法.items(),以列表返回视图对象,是一个可遍历的key / value对。
遍历字典中所有的键
在不需要使用字典中的值时,方法keys()很有用。
favorite_languages ={
'jen':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
for name in favorite_languages.keys():
print(name.title())
提示:遍历字典时,会默认遍历所有的键,因此,如果上述代码中的for name favorite_languages.keys()替换为for name in favorite_languages:,输出不变。
在上述遍历中添加一条条件:当名字为你指定朋友的名字时,打印一条消息,指出其喜欢的语言。
favorite_languages ={
'jen':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
friends=['jen','edward']
for key in favorite_languages.keys():
print(name.title())
if key in friends:
print(hi +name.title()+", I see your favorite language is"+favorite_languages[name].title()+"!")
按顺序遍历字典中所有的键
字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。为此你可以使用函数sorted()来获取按照特定顺序排序的键列表副本。
favorite_languages ={
'jen':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
for name in sorted(favorite_languages.keys()):
print(name)
遍历字典中所有的值
如果你感兴趣的是字典中包含的值,可使用方法values(),它返回一个值列表,而不包含任何键。
favorite_languages ={
'jen':'python',
'sarah':'c',
'edward':'ruby',
'phil':'python',
}
for value in favorite_languages.values():
print(values)
如果要剔除重复项,可以使用函数集合set(),集合类似于列表。
for language in set(favorite_languages.values()):
print(language)
动手试一试
有一个河流字典,遍历它,并打印出它流经哪个国家。
rivers={
'nile':'egypt',
'honghe':'china',
'changjiang':'china',
}
for river,country in rivers.items():
print(river+"'s through"+country+'.')
创建一个可能会接受调查的名单,有些人包含在字典中了,有些人不在字典中,对于已经参与调查的人,打印一条消息表示感谢,对于没参与调查的人,打印一条邀请信息。
interview={
'zhang':'canyu',
'wang':'canyu',
'liu':'canyu',
'zhao':'canyu',
}
man_list=['zhang','xu','wang','liu','zhao','zhu','tie','qing']
for name in man_list:
if name in interview.keys():
print(f"{name} thank you join this interview!")
else:
print(f"{name} Hope you will come and join us for an interview.")
嵌套
将一系列字典存储在列表中,或将列表作为值存储在字典中,称为嵌套。
你可以在列表中嵌套字典,在字典中嵌套列表,甚至在字典中嵌套字典。
字典列表
举例:创建一个外星人列表,其中每个外星人都是一个字典,包含有外星人的各种信息。
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)
print(aliens)
使用range()函数,生成多个外星人。
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:"+str(len(aliens)))
print(aliens)
将前三个外星人修改为黄色,速度为中等且值10个点:
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]:
if alien['color']=='green':
alien['color']='yellow'
alien['speed']='medium'
alien['points']=10
for alien in aliens[0:5]:
print(alien)
在字典中存储列表
pizza={
'crust':'thick',
'toppings':['mushrooms','extra cheese'],
}
print("you order a"+pizza['crust']+"-crust pizza"+"with the following toppings:")
for topping in pizza['toppings']:
print("\t"+topping)
每个人喜欢的语言统计:
favorite_languages={
'jen':['python','rubby'],
'sarah':['c'],
'edward':['ruby','go'],
'phil':['python','haskell'],
}
for name,languages in favorite_languages.items():
print("\n"+name.title()+"'s favorite languages are:")
for language in languages:
print('\t'+language.title())
注意:列表和字典的嵌套层级不应该太多。如果嵌套层级比前面示例多得多,很可能有更简单的解决方案。
在字典中存储字典
可以在字典中嵌套字典,但这样做,代码可能很快复杂起来。
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())
使用函数和方法归纳
方法
.items()
.keys()
.values()
函数
sorted()
set()
range()