day08 字典
一、三目运算
-
C语言的三目运算符
条件语句 ? 表达式1 :表达式2
- 条件满足表达式1为结果,条件不满足表达式2为运算结果
-
python的三目运算符:
表达式1 if 条件语句 else 表达式2
- 判断条件语句是否成立,整个运算表达式的结果为表达式1的值,否则是表达式2的值
age = 6
result = '成年' if age >= 18 else '未成年'
print(result)
- 案例:利用列表推导式将数字列表中所有的奇数乘以2,所有的偶数除以2
list1 = [23, 4, 67, 88, 90, 21]
result = [i // 2 if i % 2 == 0 else i * 2 for i in list1]
print(result)
二、认识字典
-
需求:定义一个变量保存一个学生的信息
- 字符串以符号为单位
- range创建等差数列
- 列表满足需求但是数据意义不明确,代码可读性低,列表用于存储意义相同的数据
- 如需要同时保存多个意义不同的数据,使用字典
-
什么是字典(dict)
- 字典是容器型数据(系统提供)
- 将{}作为容器的标志,
- 里面多个键值对用逗号隔开(一个键值对就是一个元素)
- 字典是可变(支持增删改);
- 字典是无序的(顺序不影响结果,不支持下标操作)
- 字典的元素:
- 由键和值组成,其中值才是真正想要保存的数据,键是对值进行区分和说明的
- 对键的要求 - 键只能是不可变类型的数据(数字、字符串、bool,列表就不行);键是唯一的
- 对值的要求 - 任何数据类型的数据都可以作为字典的值
- 字典是容器型数据(系统提供)
-
空字典
dict1 = {}
print(dict1)
- 无序
dict1 = {'a': 10, 'b': 10}
dict2 = {'b': 10, 'a': 10}
print(dict2 == dict1) #True
- 键是不可变的数据类型
dict2 = {'a': 10, 'b': 10, True: 50, (20, 10): 40}
# dict2 = {'a': 10, 'b': 10, True: 50, [20, 10]: 40} #TypeError: unhashable type: 'list'
- 键是唯一的
dict2 = {'a': 10, 'a': 12}
print(dict2) # {'a': 12}
三、字典查操作 - 获取字典的值
1、查单个(最重要) - 获取字典中某一个值
- 字典[键]
- 或取字典中指定键对应的值,
- 键不存在会报错
dog = {'name': 'lily', 'age': 3, 'color': 'black', 'breed': '土狗'}
print(dog['name'])
print(dog['age'])
# print(dog['weight']) #报错 KeyError: 'weight'
- 字典.get(键)
- 或取字典中指定键对应的值,
- 如果键不存在返回空
print(dog.get('age'))
print(dog.get('weight')) # None
- 字典.get(键,默认值)
- 或取字典中指定键对应的值
- 如果键不存在返回默认值
print(dog.get('weight', 5)) # 5
2、遍历
-
for 变量 in 字典:
循环体(变量依次获取到的是字典的键)
dog = {'name': 'lily', 'age': 3, 'color': 'black', 'breed': '土狗'}
for key in dog:
print('key:', key,' value:', dog[key])
3.案例:义一个变量保存一个班级的信息
class1 = {
'name': 'python2301',
'location': '21教',
'lecturer': {
'name': '余婷',
'age': 18,
'gender': '女',
'tel': '13678192302'
},
'headTeacher': {
'name': '萍姐',
'age': 18,
'tel': '110'
},
'all_student': [
{
'name': 'stu1', 'age': 18, 'tel': '119', '专业': '电子商务', 'score': 78,
'linkman': {'name': '张三', 'tel': '82223111'}
},
{
'name': 'stu2', 'age': 23, 'tel': '8293', '专业': '计算机软件', 'score': 100,
'linkman': {'name': '李四', 'tel': '829933'}
},
{
'name': 'stu3', 'age': 30, 'tel': '918111', '专业': '数学', 'score': 96,
'linkman': {'name': '小明', 'tel': '11929203'}
},
{
'name': 'stu4', 'age': 16, 'tel': '827222', '专业': '数学', 'score': 99,
'linkman': {'name': '王五', 'tel': '8628101'}
}
]
}
1)获取班级名字
print(class1.get('name'))
2)获取班级的位置
print(class1.get('location'))
3)获取讲师的名字
print(class1.get('lecturer').get('name'))
print(class1['lecturer']['name'])
4)获取班主任的电话
print(class1.get('headTeacher').get('tel'))
print(class1['headTeacher']['tel'])
5)获取第一个学生的专业
print(class1.get('all_student')[0].get('专业'))
print(class1['all_student'][0]['专业'])
6)获取所有学生的名字
len1=len(class1.get('all_student'))
print(len1)
for key in range(len1):
print(class1.get('all_student')[key].get('name'))
for key in class1['all_student']:
print(key['name'])
7)获取所有学生的联系人名字
for key in range(len1):
print(class1.get('all_student')[key].get('linkman').get('name'))
for key in class1['all_student']:
print(key['linkman']['name'])
8)获取未成年学生的联系人电话
for key in range(len1):
if class1.get('all_student')[key].get('age')<18:
print(class1.get('all_student')[key].get('linkman').get('tel'))
for key in class1['all_student']:
if key['age']<18:
print(key['linkman']['tel'])
四、字典添加操作
- 字典[键]=值
- 当键不存在时,就添加键值对
dog = {'name': 'lily', 'age': 3, 'color': 'black', 'breed': '土狗'}
dog['weight']=10
# {'name': 'lily', 'age': 3, 'color': 'black', 'breed': '土狗', 'weight': 10}
- 字典.setdefault(键,值)
- 在字典中添加键值对,如果键不存在就添加键值对,如果键存在就不进行执行
dog.setdefault('gender','公')
print(dog)
# {'name': 'lily', 'age': 3, 'color': 'black', 'breed': '土狗', 'weight': 10, 'gender': '公'}
- 案例:让每个商品的数据格式统一
good_list=[
{'name':'火腿肠','price':2,'count':10,'discount':0.9},\
{'name':'泡鸡脚','price':10,'count':5},
{'name':'螺蛳粉','price':20,'count':6,'discount':0.8},
{'name':'棒棒糖','price':1,'count':16}
]
for i in good_list:
i.setdefault('discount',1)
五、字典删除操作
- del 字典[键]
- 删除指定键对应的键值对(无键就无值,无值就无键)
dog = {'name': 'lily', 'age': 3, 'color': 'black', 'breed': '土狗'}
print(dog)
del dog['color']
print(dog) # {'name': 'lily', 'age': 3, 'breed': '土狗'}
- 字典.pop(键)
- 取走字典中指定键对应的值,并且返回
dog = {'name': 'lily', 'age': 3, 'color': 'black', 'breed': '土狗'}
result=dog.pop('name')
print(dog) # {'age': 3, 'color': 'black', 'breed': '土狗'}
print(result) # lily
六、字典修改操作
- 字典[键]=值
- 如果键存在,改指定键对应的值
print(dog)
dog['name']='来福'
print(dog)