在Python中,字典是一系列键值对。每个键都与一个值相关联,你可以使用键来访问相关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上,你可以将任何Python的对象作为字典里的值。
- 格式:
dic = { 'key' : 'value' , 'key' : 'value' }
- 要获取与键相关联的值,可依次指定字典名和放在方括号内的键,如下所示:
>>> dic = {'color':'green','size':'1080x1080'}
>>> dic['color']
'green'
>>> dic['x']=1
>>> dic['y']=2
>>> dic
{'color': 'green', 'size': '1080x1080', 'x': 1, 'y': 2}
>>> del dic['x']
>>> dic
{'color': 'green', 'size': '1080x1080', 'y': 2}
- 字典中元素的排列顺序与定义时(添加顺序)相同
- 使用del语句时,必须指定字典名和要删除的键
- 多行字典格式:
dic = {
'a'=1,
'b'=2,
'c'=3,#一个不错的作法是,在最后一个键值对后面也加上逗号。为以后在下一行添加键值对做好准备。
}
获取值常用dic['x']
这种方法,但可能会引发问题:如果指定的键不存在就会出错。此时可以使用get()
,其第一个参数用于指定键,第二个参数为指定的键不存在时要返回的值,默认为None
favorite_language = {
'jen':'python',
'sarah':'c',
'edward':'ruby',
}
alex_lan = favorite_language.get('alex',"no alex's information")
print(alex_lan)
遍历字典
- 遍历字典的所有键值对
for user,language in favorite_language.items():
print(f"\nname:{user}")
print(f"value:{value}")
name:jen
value:10
name:sarah
value:10
name:edward
value:10
favorite_language.items()
dict_items([('jen', 'python'), ('sarah', 'c'), ('edward', 'ruby')])#用.items()可以返回键值对列表
- 遍历字典的所有键
for user in favorite_language.keys():#其实for user in favorite_language:也可以,遍历字典时会默认遍历所有的键。但.keys()更易于理解
print(user.title())
favorite_language.keys()
dict_keys(['jen', 'sarah', 'edward'])#返回的是一个列表
- 遍历字典中所有的值
for lan in favorite_language.values():
print(lan.title())
这种提取字典中所有的值没有考虑是否重复。设计的值很少的时候,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量重复项。为剔除重复项,可使用集合(set)。集合中每个元素都必须是独一无二的。
favorite_language['yaya'] = 'c'
for lan in favorite_language.values():
print(lan.title())
Python
C
Ruby
C
for lan in set(favorite_language.values()):
print(lan.title())
Ruby
Python
C
集合和字典很容易混淆,因为它们都是用一对花括号定义的。当花括号内没有键值对时,定义的很可能是集合。不同于列表和字典,集合不会以特定的顺序存储元素。
嵌套
有时候需要将一系列字典存储在列表中,或将列表作为值储存在字典中,这种称为嵌套。
- 字典列表:将字典信息储存在列表中
aliens = []
for alien_number in range(30):#批量生成
new_alien = {'color': 'green', 'point': 5, 'speed':'slow'}
aliens.append(new_alien)
for alien in aliens[:5]:
print(alien)
print("...")
print(f"Total number of aliens: {len(aliens)}")
{'color': 'green', 'point': 5, 'speed': 'slow'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
...
Total number of aliens: 30
也可修改生成的字典列表的信息
for alien in aliens[:3]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['speed'] = 'medium'
for alien in aliens[:5]:
print(alien)
print("...")
{'color': 'yellow', 'point': 5, 'speed': 'medium'}
{'color': 'yellow', 'point': 5, 'speed': 'medium'}
{'color': 'yellow', 'point': 5, 'speed': 'medium'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
{'color': 'green', 'point': 5, 'speed': 'slow'}
...
- 列表字典
每当需要在字典中将一个键关联到多个值时,都可以再字典中嵌套一个列表。
favorite_language = {
'jen': ['python', 'java'],
'sarah':'c',
'edward': ['ruby','python','r']
}
for name, lans in favorite_language.items():
if len(lans) == 1:
print(f"\n{name}'s favorite languages is {lans}.")
else:
print(f"\n{name}'s favorite "
"languages are:")
for lan in lans:
print(f"\t{lan.title()}")
jen's favorite languages are:
Python
Java
sarah's favorite languages is c.
edward's favorite languages are:
Ruby
Python
R
如果print()
中需要打出来的字符串很长,可以在合适的位置分行,只需要分行前后都打上引号,除了第一行外其他各行都在行首加上引号并缩进,python将自动合并圆括号内的所有字符串。
注意:列表和字典的嵌套层级不应该太多。如果嵌套太多,可能有更简单的解决防范。
- 在字典中储存字典
最好嵌套的字典具有相同的结构,这样处理起来会相对容易
网友评论