在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'] = 0
alien_0['y_position'] = 25
print(alien_0)
先创建一个空字典
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = 5
print(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'] = 10
alien['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循环内部的代码将更加复杂. :::