在Python中,字典是一系列键值对,每个键都与一个值相关联,可以使用键来访问值.与键相关联的值可以是数,字符串,列表乃至字典.
在Python中,字典用放在花括号({})中的一系列键值对表示
alien_0 = {'color':'green','point':5}
键值对是两个相关联的值.指定键时,python将返回与之相关联的值.键和值之间用冒号间隔,而键值对之间用逗号分隔.在字典中,想存储多少键值对都可以,最简单的字典只有一个键值对.
alien_0 = {'color':'green'}
访问字典中的值
alien_0 = {'color':'green','point':5}print(alien_0['color'])
添加键值对
字典是一种动态结构,可随时在其中添加键值对
# 字典alien_0 = {'color':'green','point':5}print(alien_0)alien_0['x_position'] = 0alien_0['y_position'] = 25print(alien_0)
先创建一个空字典
alien_0 = {}alien_0['color'] = 'green'alien_0['points'] = 5print(alien_0)
修改字典的值
alien_0 = {'color' : 'green'}alien_0['color'] = 'yellow'
删除键值对
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',}
使用get()来访问值
使用如alien_0['color']这样的方法来从获取值时,可能会引发问题:如果指定的键不存在就会出错.
如下:
favorite_language = {'jen':'python','sarah':'c','edward':'ruby','phil':'python',}print(favorite_language['bill'])

就字典而言,可使用方法get()在指定的键不存在时返回一个默认值,从而避免这样的错误.
方法get()的第一个参数用于指定键,是必不可少的;第二个参数为指定的键不存在时要返回的值,是可选的(为空将返回值None):
aline_0 = {'color':'green', 'spped':'slow'}point_value = aline_0.get('point','No point value assigned.')print(point_value)

如果字典中有键’point’,将获得与之相关联的值;如果没有,将获得指定的默认值,不会引发错误.
:::tips
如果指定的键有可能不存在,应考虑使用方法get(),而不要使用方括号表示法
:::
遍历字典
遍历所有键值对
user_0 = {'username':'efermi','first':'enrico','last':'fermi',}for key,value in user_0.items(): # for a,b in user_0 items():也可以print(f"\nKey:{key}")print(f"Value:{value}")

遍历字典中的所有键
favorite_languages = {'jen':'python','sarah':'c','edward':'ruby','phil':'python',}for name in favorite_languages.keys():print(name.title())
遍历字典时,会默认遍历所有键, 使用
for name in favorite_languages:输出将不变,但显示使用keys()可让代码更容易理解
按特定顺序遍历字典中的所有键(python3.7)
favorite_language = {'jen':'python','sarah':'c','edward':'ruby','phil':'python',}for name in sorted(favorite_language.keys()):print(f'{name.title()},thank you for taking the poll.')
遍历字典中的所有值
favorite_language = {'jen':'python','sarah':'c','edward':'ruby','phil':'python',}print("The following languages have been mentioned:")for language in favorite_language.values():print(language.title())

为剔除其中的重复项,可使用集合(set),集合中的每个元素都必须是独一无二的:
favorite_language = {'jen':'python','sarah':'c','edward':'ruby','phil':'python',}print("The following languages have been mentioned:")for language in set(favorite_language.values()):print(language.title())
:::info
可使用一对花括号直接创建集合,并在其中用逗号分隔元素:
>>> lnaguages = {‘python’,’ruby’,’python’,’c’}
>>> lnaguages
{‘c’, ‘ruby’, ‘python’}
集合和字典很容易混淆,因为他们都是用一对花括号定义的.当花括号内没有键值对时,定义的很可能是集合.不同于列表与字典,集合不会以特定的顺序存储元素
:::
嵌套
字典列表
alien_0 = {'color':'green','points':5}alien_1 = {'color':'yellow','points':10}alien_2 = {'color':'green','points':15}aliens = [alien_0,alien_1,alien_2]for alien in aliens:print(alien)

#创建一个用于存储外星人的空列表aliens = []#创建30个绿色的外星人for alien_number in range(30):new_alien = {'color':'green','point':5,'speed':'slow'}aliens.append(new_alien)#显示前5个外星人for alien in aliens[:5]:print(alien)print("...")#显示创建了多少个外星人print(f"Total nume of aliens:{len(aliens)}")

必要时,可使用for循环和if语句来修改某些外星人的颜色
#创建一个用于存储外星人的空列表aliens = []#创建30个绿色的外星人for alien_number in range(30):new_alien = {'color':'green','point':5,'speed':'slow'}aliens.append(new_alien)for alien in aliens[:3]:if alien['color'] == 'green':alien['color'] = 'yellow'alien['point'] = 10alien['speed'] = 'medium'#显示前5个外星人for alien in aliens[:5]:print(alien)print("...")#显示创建了多少个外星人print(f"Total nume of aliens:{len(aliens)}")
在字典中存储列表
# 存储所点披萨的信息
pizza = {
'crust':'thick',
'toppings':['mushrooms','extra chess'],
}
# 概述所点的披萨
print(f"you ordered a {pizza['crust']}-crust pizza "
"with the following toppings:")
for topping in pizza['toppings']:
print("\t" + topping)

如果函数调用
print()中的字符串很长,可以在合适的位置分行.只需要在每行末尾都加上引号,同时对于除第一行以外的其他各行,都在行首加上引号并缩进
在字典中存储字典
users = {
'aeinstein':{
'first':'albert',
'last':'einstein',
'location':'princeton',
},
'mcurie':{
'first':'marie',
'last':'curie',
'location':'paris',
},
}
for username, user_info in users.items():
print(f'\nUsername:{username}')
full_name = f"{user_info['first']} {user_info['last']}"
location = user_info['location']
print(f"\tFull name:{full_name}")
print(f"\tLocation:{location}")
:::tips
清注意,表示每位用户的字典都具有相同的结构.虽然Python并没有这样的要求,但这使得嵌套的字典处理起来更容易.倘若每位用户的字典都包含不同的键,for循环内部的代码将更加复杂.
:::
