day 6元组和字典

day 6元组和字典

1.元组

1.1什么是元组(tuple)
元组就是不可变的列表
元组是容器型数据类型,将()作为容器的标志,里面多个元素用逗号隔开:(元素1, 元素2, 元素3, 元素4, …)
元素不可变(不支持元素的增删改);元组是有序的(支持下标操作)
元素:任何类型的数据,并且可以重复

1.2只有一个元素的元组:(元素, )
如果一个元组中有且只有一个元素,那么唯一的元素后面必须加逗号

1.3.省略括号
在没有歧义的情况下,可以省略元组的(),直接将多个元素用逗号隔开来表示一个元组

1.4.获取元素
1)列表获取元素的方法元组都支持

song = ('葫芦娃', '海阔天空', '霸王别姬', '夜曲', '稻香', '下山')
print(song[1], song[-5])
print(song[2:])    # ('霸王别姬', '夜曲', '稻香', '下山')
for x in song:
    print(x)

for index, item in enumerate(song):
    print(index, item)

for index in range(len(song)):
    print(song[index])

2)让变量的个数和元组中元素的个数保持一致来获取元组中所有元素的值
变量1, 变量2, 变量3, … = 元组

t7 = (10, 102, 32)
x, y, z = t7
print(x, y, z)          # 10 102 32

x, y, z = 10, 102, 32

3)同时用多个变量获取元组元素的时候,变量的个数可以比元组中元素的个数少,但是必须有且只有一个变量前有*,且带✳的变量输出列表list

stu = ('小明', '男', 30, 89, 70)
m1, m2, *m3 = stu
print(m3)       # [30, 89, 70]
m1, *m2, m3 = stu
print(m1, m3, m2)       # 小明 70 ['男', 30, 89]

1.5元组相关操作
列表相关操作元组都支持

print((1, 2, 3) + ('abc', 'name'))    # (1, 2, 3, 'abc', 'name')
print((1, 2, 3) * 3)

print((1, 2, 3, 4, 5) > (10, 0))        # False
print(3 not in (1, 2))                  # True
print(sum((10, 20, 30)))                # 60
print(max((1, 23, 100, 89, 70)))        # 100
print(min(1, 23))                       # 1

nums = 1, 2, 12, 1, 8, 35, 6
new_nums = sorted(nums)
print(new_nums)         # [1, 1, 2, 6, 8, 12, 35]排序后为列表

print(len(nums))        # 5

print(tuple('abc'))         # ('a', 'b', 'c')
print(tuple(new_nums))         # (1, 1, 2, 6, 8, 12, 35)
print(tuple(range(10, 15)))     # (10, 11, 12, 13, 14)

1.6支持切片

a = nums[:]
print(type(a))          # <class 'tuple'>
a = nums[2: -2: 2]
print(type(a))          # <class 'tuple'>

2.字典

2.1什么时候使用字典
同时保存多个意义不同的数据就使用字典

2.2什么是字典(dict)
字典是容器型数据类型,将大括号{}作为容器的标志,里面多个元素用逗号隔开(元素必须为键值对)
{键1: 值1, 键2: 值2, 键3: 值3, … }
字典是可变的(支持增删改);字典是无序的(不支持下标操作)
元素:必须是键值对;
键 - 必须是不可变的数据(数字、字符串、元组),一般使用字符串;键是用来对值进行描述和区分的、唯一的

2.3字典的增删改查
1)查 - 获取值
字典[key] - 获取指定key对应的值(如果key不存在会报错)
字典.get(key) - 获取指定key对应的值(如果key不存在不会报错,返回None)
字典.get(key, 默认值) - 获取指定key对应的值(如果key不存在不会报错,返回指定默认值)

dog = {'name': '刘昊然', 'age': 2, 'sex': '母狗', 'breed': '土狗'}
print(dog['sex'], dog['name'])      # 母狗 刘昊然
# print(dog['weight'])      # key error:'weight'
print(dog.get('weight'))    # None
print(dog.get('weight'), 0)     # 0

2)遍历
for 变量 in 字典:
pass
注意:变量依次取到的是字典的key
键值对离开了字典无效

dog = {'name': '刘昊然', 'age': 2, 'sex': '母狗', 'breed': '土狗'}
for x in dog:
    print(dog[x])  # 刘昊然 2 母狗 土狗

3)增、改
字典[key] = 值 - 当key存在时就修改指定key的值;当key不存在就添加键值对

3)删
del 字典[key] - 删除指定key对应的键值对
字典.pop(key) - 取出指定key对应的值

练习:定义一个变量保存一个班级信息,班级信息主要包含:班级名称、位置、容量、班主任、讲师、所有学生
班主任:姓名、性别、年龄、电话、qq
讲师:姓名、性别、年龄、电话、qq、级别
所有学生:多个学生(5个),每个学生包含:姓名、性别、年龄、学历、专业、电话

class_A = {'班级名称': 'python_2004', '位置': '九教', '容量': '30',
           '班主任': {'姓名': 'zhang sir', '性别': '女', '年龄': 18, '电话': '110', 'qq': '120'},
           '讲师': {'姓名': 'yu sir', '性别': '女', '年龄': 18, '电话': '110', 'qq': '120', '级别': '教授'},
           'students': [
                {'姓名': '小张', '性别': '男', '年龄': 24, '学历': '本科', '专业': '捡垃圾工程', '电话': '1519887854'},
                {'姓名': '小李', '性别': '女', '年龄': 21, '学历': '本科', '专业': '打扫工程', '电话': '1519887854'},
                {'姓名': '小王', '性别': '女', '年龄': 22, '学历': '本科', '专业': '开车工程', '电话': '1519887854'},
                {'姓名': '小徐', '性别': '男', '年龄': 25, '学历': '本科', '专业': '洗衣服工程', '电话': '1519887854'},
                {'姓名': '小垃圾', '性别': '男', '年龄': 22, '学历': '本科', '专业': '做饭工程', '电话': '1519887854'}]}
# 获取讲师的级别
print(class_A['讲师']['教授'])
print(class_A.get['讲师'].get['级别'])
# 获取每个学生年龄的平均值
a = 0
students = class_A['students']
for name in students:
	a += name['年龄']
print(a/len(students))

2.4字典的相关操作
1)in和not in
key in 字典 - 判断字典中是否存在指定的键

2)相关函数:len、dict
a.len(字典) - 获取长度(获取键值对的个数)
b.字典的类型转换
dict(数据) - 将指定数据转换成字典,数据的要求:
a.数据本身是序列
b.序列中的每个元素必须是长度为2的小序列
c.小序列中的第一个元素是不可变的数据
list(字典) - 将字典转换成列表(将字典的key作为列表的元素)

3)清空字典相关方法
a.字典.clear() - 清空字典

d1 = {'a': 10, 'b': 20, 'c': 30}
d1.clear()
print(d1)			# {}

b.不建议使用:效率低

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

4)字典.copy() - 复制字典产生一个一摸一样的新字典并返回

d1 = {'a': 10, 'b': 20, 'c': '30'}
d2 = d1
d1['a'] = 20
print(d2)           # {'a': 20, 'b': 20, 'c': '30'}
d2 = d1.copy()
d1['a'] = 30
print(d2)           # {'a': 20, 'b': 20, 'c': '30'}

5)dict.fromkeys(序列) - 创建一个新的字典,键是序列中的每一个元素,值都是None

dict.fromkeys(序列, 值) - 创建一个新的字典,键是序列中的每一个元素,值是指定的值

print(dict.fromkeys('abc'))     # {'a': None, 'b': None, 'c': None}
print(dict.fromkeys(['name', 'age', 'sex']))        # {'name': None, 'age': None, 'sex': None}
print(dict.fromkeys('abc', 100))        # {'a': 100, 'b': 100, 'c': 100}

6)keys、values、items
字典.keys() - 获取字典所有的key(返回值是序列但是不是列表)
字典.values() - 获取所有的值(返回值是序列但是不是列表)
字典.items() - 同时获取每个键值对的键和值(返回值是序列,序列中的元素是元组)

d1 = {'a': 10, 'b': 20, 'c': 30}
print(d1.keys())        # dict_keys(['a', 'b', 'c'])
print(d1.values())      # dict_values([10, 20, '30'])
print(d1.items())       # dict_items([('a', 10), ('b', 20), ('c', '30')])

7)字典.setdefault(键, 值) - 在字典中添加键值对(只添加不修改)

d1 = {'a': 10, 'b': 20, 'c': 30}
d1.update({'name': '张三', 'age': 20, 'a': 100})
print(d1)    # {'a': 100, 'b': 20, 'c': 30, 'name': '张三', 'age': 20}

d1.update(('nm', [10, 20]))
print(d1)    # {'a': 100, 'b': 20, 'c': 30, 'name': '张三', 'age': 20, 'n': 'm', 10: 20}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值