day08 - 字典

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值