pythonday07认识字典

#一、认识字典

1. 字典的作用

需求:定义一个变量保存一个学生的信息

stu1 = ['小小七', 2, '电子信息', 170, 80, 90]
stu = {
    'name': '小小七',
    'age': '2',
    '专业': '电子信息',
    'height': '170',
    'weight': '80',
    'score': '90'
}
print(stu['age'])

2.字典和列表的选择

如果要保存多个意义不同的数据,就使用字典;要保存多个意义相同的数据就用列表

3什么是字典(dict)

字典是系统类型,属于容器型数据类型(序列);
将{}作为容器的标志,里面多个键值对(元素)用逗号隔开:{键1:值1,…}
字典是可变的(支持增删改);字典是无序(不支持下标;顺序不影响结果)
键 - 键必须是不可变类型数据;键唯一
值 - 没有要求

**字典无序

print({'a': 10, 'b': 20} == {'b': 20, 'a': 10})

**键不可变

dict1 = {10:20,'a':30}

**键唯一

#二、字典的查操作

字典存储数据正真想要保存的是值,键只是用来对值进行区分和说明的()
##1.查单个 - 获取单个值

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

##2.生活中的列表和字典

需求:结合实际定义一个变量保存一i个班级的信息
班级信息:班级名、教室、讲师、班主任、学生

class1 = {
    'className': 'python2205',
    'classRoom': '11教',
    'lecturer': {'name': '余婷', 'age': 18, 'tel': '13678192302', 'gender': '女'},
    'classTeacher': {'name': '燕子姐', 'age': 18, 'tel': '119', 'QQ': '8282821'},
    ' students': [
        {'name': 'stu1', 'age': 19, 'tel': '11922333', 'gender': '男', 'linkman': {'name': '阿七', 'tel': '14562'}},
        {'name': 'stu2', 'age': 12, 'tel': '11921533', 'gender': '女', 'linkman': {'name': '阿三', 'tel': '18562'}},
        {'name': 'stu3', 'age': 23, 'tel': '11472333', 'gender': '男', 'linkman': {'name': '阿四', 'tel': '16562'}},
        {'name': 'stu4', 'age': 36, 'tel': '11298533', 'gender': '女', 'linkman': {'name': '阿九', 'tel': '18562'}},
        {'name': 'stu5', 'age': 29, 'tel': '11925413', 'gender': '男', 'linkman': {'name': '阿六', 'tel': '15862'}}
    ]
}
# 1)获取班级名称
print(class1.get('className'))

# 2)获取讲师的名字和电话
print(class1['lecturer']['name'], class1['lecturer']['tel'])

# 3)获取班主任的名字和QQ
print(class1['classTeacher']['name'], class1['classTeacher']['QQ'])

# 4)打印所有学生的名字
result = [i['name'] for i in class1[' students']]
print(result)
# print(class1[' students'][0]['name'])

# 5)计算所有男生的平均年龄
total_age = 0
count = 0
for stu in class1[' students']:
    if stu['gender'] == '男':
        total_age += stu['age']
        count += 1
print('男生的平均年龄:', total_age / count)

# 6)打印所有女学生的联系人的电话
for stu in class1[' students']:
    if stu['gender'] == '女':
        print(stu['linkman']['tel'])

##3.遍历字典 - 一个一个的获取字典所有的值

方法1:
for 变量 in 字典:
循环体(变量获取到的是字典的键)
方法2:
for 变量1,变量2 in 字典.items():
循环体(变量1依次取到的是所有的键,变量2依次取到的是所有的键)

#三、字典的增删改

##1.增(添加键值对)、改(修改某个键值对应的值)

1)字典[键] = 值 - 如果键不存在就添加键值对,如果存在就修改指定键值对应的值
2)字典.setdefault(键,值) - 添加键值对(只会在键不存在的时候实现添加的功能,键存在五作为)

**例子:

goods = [
    {'name': '火腿肠', 'price': 1.5, 'count': 53, 'discount': 0.9},
    {'name': '泡面', 'price': 3.5, 'count': 100, },
    {'name': '矿泉水', 'price': 1, 'count': 130, },
    {'name': '面包', 'price': 5.5, 'count': 10, 'discount': 0.75}
]
for x in goods:
    x.setdefault('discount', 1)
print(goods)

##2.删

删除键值对

1)del 字典[键] - 删除指定键对应键值对

stu = {'name': '阿七', 'age': 18, 'height': 177, 'gender': '男'}
del stu['height']
print(stu)

##2)字典.pop(键)

取出字典中指定键值对应值并且返回

stu = {'name': '阿七', 'age': 18, 'height': 177, 'gender': '男'}
result = stu.pop('gender')
print(stu,result)

#四、字典相关操作和函数

##1.字典

不支持+、*和比较大小,只支持比较是否相等

##2.in和not in

判断字典中是否存在指定键

“”"
键 in 字典
键 not in 字典
“”"

dog = {'name': '阿七', 'age': 3, 'type': '土狗', 'price': 10, 'color': '灰色'}
print(3 in dog)  # False
print('name' in dog)  # True

##3.len

print(len(dog))

##4.dict

dict(数据) - 将指定数据转换成字典
数据的要求:1) 数据本身是一个大序列
2)大序列中的每个元素有且只有两个元素的小序列,并且小序列中的第一个元素是不可变类型的数据

data1 = ['ad', [10, 20], '10']
print(dict(data1))      # {'a': 'd', 10: 20, '1': '0'}

#五、字典相关方法

字典.xxx()

##1.字典.clear()

  • 清空字典

##2.字典.copy()

    • 复制字典产生一个一模一样的新字典,并且将新的字典返回

##3.字典

“”"
字典.keys() - 获取字典所有的键并且返回
字典.values() - 获取字典所有的值并且返回
字典.items() 将字典中的每一个键值对转换一个一个的元组作为序列中的元素返回
“”"

dog = {'name': '阿七', 'age': 3, 'type': '土狗', 'price': 10, 'color': '灰色'}
print(dog.keys())

##4.字典1.updata(字典2)

  • 将字典2中的键值对全部添加到字典中
dog.update({'a':10,'b':2,'age':10})
print(dog)

#六、拷贝

**拷贝 - 复制数据产生一个一模一样的新数据

##1.直接赋值和拷贝的区别

a = [10,20,30,40]
b = a
print(b)    # 直接赋值是保存地址

c = a.copy()    # 拷贝是复制原数据产生一个一模一样的新数据,并且将新的数据地址返回
print(c)

a.append(100)

##2.浅拷贝和深拷贝

浅拷贝:列表.copy()、字典.copy()、列表[:]、copy(可变数据)
深拷贝:deepcopy(可变数据) # (既拷贝对象本身,也会拷贝对象中的子对象)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值