06 字典

目录

一、字典

1. 什么是字典

2. 字典的语法

二、字典的查操作

1. 查单个

2. 遍历

三、字典的增删改

1.字典函数速查

2.增、改

3.删除

四、字典相关操作

1.in和not in

2.字典相关函数

3.字典相关方法

4.字典推导式


一、字典

1. 什么是字典

1) 字典是python自带的容器型数据类型, 将{ }作为容器的标志, 里面多个键值对逗号隔开: {键1:值1, 键2:值2, 键3:值3, ...}

2) 字典是可变的(支持增删改);字典是无序的(顺序不影响结果,不支持索引操作)

3) 字典对元素的要求
字典中的元素必须全部都是键值对
键必须是不可变类型的数据(一般使用字符串): 键是唯一的,值可以是任何类型的数据,也可以重复

2. 字典的语法

语法:d = {key1 : value1, key2 : value2 }

1) 字典的每个键值(key=>value)对用冒号(:)分割,每个键值对之间用逗号(,)分割,整个字典包括在花括号({})中
2) 键必须是唯一的,但值则不必。
3) 值可以是任意类型,但键必须是不可变的,例如字符串、数字或者元组。

注意:列表和字典都可以增删改操作,但是列表是有序的,字典是无序的(顺序不影响结果) 

# 字典无序
print({'a': 10, 'b': 20} == {'b': 20, 'a': 10})   # True

# 空字典
dict1 = {}
print(dict1)    # {}

# 键必须是不可变类型的数据
dict1 = {'a': 10, 10: 20, (1, 2): 30}
print(dict1)    # {'a': 10, 10: 20, (1, 2): 30}

# 键是唯一的
dict1 = {'a': 10, 'b': 20, 'a': 30}
print(dict1)        # {'a': 30, 'b': 20}

二、字典的查操作

1. 查单个

获取字典中的某一个值

字典[键]获取字典中指定键对应的值,如果键不存在会报错
字典.get(键)获取字典中指定键对应的值,如果键不存在不会报错会返回None
字典.get(键, 默认值)获取字典中指定键对应的值,如果键不存在会返回默认值

字典用get方法获取相应键的值时,若输入的键值原字典没有,虽不会报错并且2种都会有输出,但也不会将新键值对加入字典 

dog = {'name': 'mimi', 'age': 2, 'gender': '公', 'color': 'white'}

print(dog)

print(dog['name'])

print(dog.get('age'))
print(dog.get('weight'))
print(dog)

print(dog.get('weight', 3))
print(dog)

 真实案例:


class1 = {
    'name': 'python2402',
    'address': '6教室',
    'lecturer': {'name': '余婷', 'age': 18, 'gender': '女', 'qq': '726550822'},
    'head_teacher': {'name': '舒嚒嚒', 'age': 18, 'gender': '女', 'tel': '110'},
    'students': [
        {'name': 'stu1', 'age': 17, 'gender': '男', 'score': 89, 'link_man': {'name': '张三', 'tel': '122334'}},
        {'name': 'stu2', 'age': 28, 'gender': '女', 'score': 99, 'link_man': {'name': '李四', 'tel': '29833'}},
        {'name': 'stu3', 'age': 22, 'gender': '女', 'score': 65, 'link_man': {'name': '王五', 'tel': '22223'}},
        {'name': 'stu4', 'age': 22, 'gender': '男', 'score': 77, 'link_man': {'name': '赵六', 'tel': '6544'}},
        {'name': 'stu5', 'age': 21, 'gender': '男', 'score': 46, 'link_man': {'name': '何七', 'tel': '664322'}},
        {'name': 'stu6', 'age': 16, 'gender': '女', 'score': 82, 'link_man': {'name': '李八', 'tel': '12278334'}}
    ]
}

# 1)获取班级的名字
print('班级名字:', class1['name'])
# 2)获取讲师的名字和qq
print('讲师名字:',class1['lecturer'].get('name'))
print('讲师 qq:',class1['lecturer'].get('qq'))
# 3)获取班主任的年龄和电话
print('班主任年龄:',class1['head_teacher'].get('age'))
print('班主任电话:',class1['head_teacher'].get('tel'))
# 4)获取所有学生的名字
print('所有学生的名字:')
for student in class1['students']:
    print(student['name'])
# 5)计算所有女生的平均年龄
sum1 = 0
count = 0
for student in class1['students']:
    if student['gender'] == '女':
        sum1 += student['age']
        count += 1
print('所有女生的平均年龄:', sum1/count)
# 6)统计不及格学生的人数
count1 = 0
for student in class1['students']:
    if student['score'] < 60:
        count1 += 1
print('不及格学生的人数:', count1)
# 7)获取所有男生的联系人电话
for student in class1['students']:
    if student['gender'] == '男':
        print(student['link_man'].get('tel'))

2. 遍历

一个一个地获取字典中所有的值

语法:

for 变量 in 字典:
    循环体(变量依次取到的是)
dog = {'name': '财财', 'age': 3, 'gender': '公', 'color': '白色'}
for x in dog:
    print(x, dog[x])

三、字典的增删改

1.字典函数速查

2.增、改

1)字典[键] = 值

如果键存在修改字典中指定键对应的值;如果键不存在添加键值对

dog = {'name': '财财', 'age': 3, 'gender': '公', 'color': '白色'}
print(dog)

# 修改
# 对应的值
dog['name'] = '旺财'
print(dog)

# 添加键值对
dog['weight'] = 10
print(dog)

 2)字典.setdefault(键, 值)

如果键不存在就添加键值对,如果键已经存在不会修改键对应的值

dog = {'name': '财财', 'age': 3, 'gender': '公', 'color': '白色'}
print(dog)

dog.setdefault('name', '旺财')
print(dog)

dog.setdefault('weight', 10)
print(dog)

练习:

# 练习:在没有折扣商品添加折扣值为1
goods_list = [
    {'name': '泡面', 'price': 3.5, 'count': 10, 'discount': 0.8},
    {'name': '火腿肠', 'price': 1.5, 'count': 293},
    {'name': '面包', 'price': 7.5, 'count': 6, 'discount': 0.5},
    {'name': '矿泉水', 'price': 1.5, 'count': 1890, 'discount': 0.9},
    {'name': '榨菜', 'price': 0.5, 'count': 19}
]
for good in goods_list:
    good.setdefault('discount', 1)
print(goods_list)

3.删除

删除键值对

1)del 字典[键] —— 删除字典中指定键对应的键值对

dog = {'name': '财财', 'age': 3, 'gender': '公', 'color': '白色'}
print(dog)

del dog['age']
print(dog)

2)字典.pop(键) —— 取走字典中指定键对应的值

dog = {'name': '财财', 'age': 3, 'gender': '公', 'color': '白色'}
print(dog)

result = dog.pop('age')
print(dog, result)

四、字典相关操作

1.in和not in

数据 in 字典 —— 判断字典中是否存在指定数据对应的

dict1 = {'a': 10, 'b': 20}
print(10 in dict1)      # False
print('a' in dict1)     # True

2.字典相关函数

1)len(字典) —— 统计字典中键值对的个数

2)list(字典) —— 将字典转换成列表的时候,是将字典的作为列表的元素

3)dict(容器) —— 将容器转换成字典的时候,容器中的每个元素必须是长度为2的小容器

# 1)len(字典)  -  统计字典中键值对的个数
dog = {'name': '财财', 'age': 3, 'gender': '公', 'color': '白色'}
print(len(dog))    # 4

# 2)list(字典)  -  将字典转换成列表的时候,是将字典的键作为列表的元素
print(list(dog))        # ['name', 'age', 'gender', 'color']

# 3)dict(容器)
data = [[1, 2], [3, 4], 'ab', 'cd']
print(dict(data))    # {1: 2, 3: 4, 'a': 'b', 'c': 'd'}

# 列表里面嵌套2元素的元组
data = [(10, 20), ('name', 123), ('1', 2)]
print(dict(data))    # {10: 20, 'name': 123, '1': 2}

3.字典相关方法

1)字典.clear()   -   清空字典

2)字典.copy()   -   赋值字典产生一个一模一样的新字典

3)字典.keys()     -   获取字典所有的键

      字典.values()   -   获取字典所有的值

      字典.items()   -   获取字典中所有的键和值

上述 第3)点 三个函数都是返回一个特殊的容器,当原字典变化后特殊容器中的数据会自动更新 

dog = {'name': '财财', 'age': 3, 'gender': '公', 'color': '白色'}

keys = dog.keys()
values = dog.values()
items = dog.items()

print(keys)
print(values)
print(items)

dog['weight'] = '2kg'

print(keys)
print(values)
print(items)

如图,字典的键和值分别提取出来后是一种特殊的类型,所以一般情况下是将其转化为列表list

4)字典.update(容器)   -   将容器中所有的元素作为键值对添加到字典中

   (容器可以是字典也可以是能够转换成字典的其他容器)

dict1 = {'name': '土豆', 'age': 3, 'breed': '柯基', 'gender': '公'}
dict2 = {'a': 10, 'b': 20}
dict1.update(dict2)
print(dict1)    
# {'name': '土豆', 'age': 3, 'breed': '柯基', 'gender': '公', 'a': 10, 'b': 20}

4.字典推导式

 结构:

   {表达式1:表达式2 for 变量 in 容器}
   {表达式1:表达式2 for 变量 in 容器 if 条件语句}

练习:

# 练习:用字典推导式交换字典的键和值的位置
dog = {'name': '土豆', 'age': 3, 'breed': '柯基', 'gender': '公'}
result = {dog[x]: x for x in dog}
print(result)    # {'土豆': 'name', 3: 'age', '柯基': 'breed', '公': 'gender'}

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值