python自学第4天-字典
任务:
- 学习能够将相关信息关联起来的Python字典,
- 以及如何访问和修改字典中的信息。字典可存储的信息量几乎不受限制,
- 我们会演示如何遍历字典中的数据。
- 学习存储字典的列表、存储 列表的字典和存储字典的字典。
- 使用字典,更准确地为各种真实物体建模
python中的字典类似与json数据{key:value}
字典中由一组一组键值对 key和 value 组成
格式:
字典名 = {'key1':'value1','key2':'value2'···}
1. 键需要用‘’括起来,值则是python中的任何对象
2. 键和值之间用冒号分隔,而键值对之间用逗号分隔。
- 则value1 存储在 **字典名[‘key1’]**中
people = {"name":"yulin","sex":"男","age":58,"bir":"2000"}
print(f"姓名:{people['name']}\n性别:{people['sex']}\n年龄:{people['age']}\n生日:{people['bir']}")
在Python中, 字典是一系列键值对 。每个键都与一个值相关联,你可使用键来访问相关联的值。与键相关联的值可以是数、字符串、列表乃至字典。事实上,可将 任何Python对象用作字典中的值
访问字典中的值
- 访问字典中的值,可依次指定字典名和放在方括号内的键
字典名['key1']
添加键值对
字典是一种动态结构,可随时在其中添加键值对。要添加键值对,可依次指定字典名、用方括号括起的键和相关联的值。
字典名['key1'] = 'value'
- 字典中元素的排列顺序与定义时相同。如果将字典打 印出来或遍历其元素,将发现元素的排列顺序与添加顺序相同(尾插法)
空字典
在定义时,仅用 一对“{}”括起来的空字典
- 可先使用 一对空花括号定义一个字典,再分行添加各个键值对。
people = {}
people['name'] = 'XXXXX'
people['sex'] = '男'
people['age'] = '18'
- 使用字典来存储用户提供的数据或在编写能自动生成大量键值对的代码时,通常需要先定义一个空字典。
修改字典的值
对已存储的键值对进行修改
字典名['key'] = 'value'
删除键值对
于字典中不再需要的信息,可使用del 语句将相应的键值对彻底删除
- 使用del 语句时,必须指定字典名和要删除的键。
下面的代码从字典people 中删除键’age’ 及其值
del people['age']
也可以使用dict.pop(key)
people.pop('age')
#此时pop必须指定参数
字典规范
字典存储的可以是一个对象的多种信息
也可以使用字典来存储众多对象的同一种信息,比如每个班级中同学的身高
class8_talls = {
'wang': '180',
'xiaomei': '165',
'Jio': '169',
'halo': '175',
}
- 确定需要使用多行来定义字典时,要在输 入左花括号后按回车键。在下一行缩进四个空格,指定第一个键值对,并在它后面 加上一个逗号。此后再按回车键时,文本编辑器将自动缩进后续键值对,且缩进量 与第一个键值对相同.定义好字典后,在最后一个键值对的下一行添加一个右花括号,并缩进四个空格, 使其与字典中的键对齐。一种不错的做法是,在最后一个键值对后面也加上逗号, 为以后在下一行添加键值对做好准备。
people = {"name":"XXXX",
"sex":"男",
"age":23,
"bir":"2000",
}
#获取age
people['age']
使用 get() 来访问值
使用放在方括号内的键从字典中获取感兴趣的值时,可能会引发问题:如果指定的 键不存在就会出错。
以字典名[‘key’]访问不存在的键值对时的出错提醒
KeyError: 'key'
- 使用get()方法会在访问指定的键不存在时返回一个默认值,从而避免这样的错误。如果指定的键有可能不存在,应考虑使用方法get() ,而不要使用方括号表示法。
方法get() 的第一个参数用于指定键,是必不可少的;第二个参数为指定的键不存 在时要返回的值,是可选的:
字典名.get('key','键不存在时要返回的值')
若不给出第二次参数,指定的键不存在时,默认返回None
- None:这个特殊值表示没有相应的值。None 并非错误,而是一个表 示所需值不存在的特殊值
遍历字典
可遍历字典的所有键值对,也可仅遍历键或值。
遍历字典时,会默认遍历所有的键
for key in people
print(f'{key}:{people[key]}')
遍历所有键值对
获悉该字典中的所有信息,则需要使用for循环来遍历这个字典
字典名.items()
格式:
for key, value in 字典名.items():
print(f"\nKey: {key}")
print(f"Value: {value}")
- for 后面有两个参数(用,隔开)一个是key,一个是值
- for 后面只有一个参数, 则为元组(key,value)
people = {"name": "XXX",
"sex": "男",
"age": 58,
"bir": "2000",
"weight": 202
}
for trupt in people.items():
print(trupt)
print(people)
#输出:
('name', 'XXX')
('sex', '男')
('age', 58)
('bir', '2000')
('weight', 202)
{'name': 'yulin', 'sex': '男', 'age': 58, 'bir': '2000', 'weight': 202}
-
注意
python遍历时不能修改字典元素
在字典遍历过程中修改字典元素,故报错RuntimeError: dictionary changed size during iteration
解决方法
将遍历条件改为列表
for key,value in people.items():
if key=='name'
del people[key]
for key,value in list(people.items()):
if key=='name'
del people[key]
遍历所有的键
在不需要使用字典中的值时,只需要键时
使用字典名.keys() 可访问所有的键,同理遍历时修改则需要使用list()方法转化为列表在修改。
for key in people.keys():
print(key)
- 当然可以使用
for key in people:
print(key)
#输出所有键
for key in people:
print(people[key])
#输出所有值
for key in people
print(f'{key}:{people[key]}')
#以键值对的形式打印所有
for key in people.items():
print(f'{key[0]}:{key[1]}')
#以键值对的形式打印所有
按特定顺序遍历字典中的所有键
遍历字典时将按插入的顺序返回其中的元素。
不过在有些情况下,你可能要按与此不同的顺序遍历字典。
方法:
- 要以特定顺序返回元素,一种办法是在for 循环中对返回的键进行排序。为此,可 使用函数sorted() 来获得按特定顺序排列的键列表的副本
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for key in sorted(favorite_languages.keys()):
print(f'{key}:{favorite_languages[key]}')
#输出
edward:ruby
jen:python
phil:python
sarah:c