python容器型数据–字典
单目运算符: not
双目运算符: +、-、*、/、and、
三目运算符: if - else
表达式2 if 表达式1 else 表达式3
num = [23, 4, 67, 88, 90, 21]
nums = [x * 2 if x % 2 else x // 2 for x in num]
print(nums)
1.概念
字典是容器型数据类型,用{}作为标准
{键1:值1.键2:值2,…}
1.字典是可变的(支持增删改查)
2.字典是无序的(不支持下标操作)
3.元素的要求:字典的元素是键值对
键的要求:1.键必须是不可变类型,(一般字符串)2.键是唯一的
值的要求:无要求
定义一个变量,保存一个学生的信息
stu1 = {
'name': '小明',
'age': '28',
'gender': '男'
}
print(stu1)
2)如果保存的多个数据意义相同用列表,反之用字典
空字典
dict1 = {}
键必须是不可变类型(数字,字符串,布尔,元组)–可变(字典,列表)
dict2 = {10: 20, 'a': 30, (10, 20): 55}
键是唯一的
dict3 = {'a': 10, 'a': 100}
print(dict3) # {'a': 100}
2.字典的查
查单个 - 获取字典某一个键对应的值
1.字典[键] - 获取字典中指定键对应的值,若键不存在会报错
2.字典.get(键) - 获取字典中指定键对应的值,若键不存在不报错,返回None
字典.get(键, 默认值) - 获取字典中指定键对应的值,若键不存在不报错,返回默认值
dog = {'name': '小白', 'age': 3, 'breed': '柴', 'gender':'母'}
print(dog['name'])
实际生活中的字典
例:定义一个变量保存一个班级的信息
班级名、位置、老师、班主任、学生
class1 = {
'class_name': 'Python2204',
'address': '15教',
'lecturer': {'name': '余婷', 'age': 18, 'qq': '726550822', 'gender': '女'},
'class_teacher': {'name': '静静', 'tel': '110'},
'students': [
{'name': 'stu1', 'age': 21, 'major': '会计', 'tel': '120', 'contacts': {'name': '张三', 'tel': '162723'}},
{'name': 'stu2', 'age': 30, 'major': '电子', 'tel': '219223', 'contacts': {'name': '小明', 'tel': '281912'}},
{'name': 'stu3', 'age': 19, 'major': '旅游管理', 'tel': '123233', 'contacts': {'name': '小花', 'tel': '886552'}},
{'name': 'stu4', 'age': 25, 'major': '通信', 'tel': '4444221', 'contacts': {'name': '李四', 'tel': '22342345'}},
{'name': 'stu5', 'age': 25, 'major': '机械', 'tel': '223111', 'contacts': {'name': '王五', 'tel': '555632'}},
{'name': 'stu6', 'age': 23, 'major': '数学', 'tel': '234234', 'contacts': {'name': '赵六', 'tel': '96533'}}
]
}
# 1)打印班级的名字和教室
print(class1.get('class_name'))
print(class1.get('address'))
# 2) 打印班级讲师的名字和年龄
a = class1.get('lecturer')
print(a.get('name'))
print(a.get('age'))
# 3) 打印班主任的电话
print(class1['class_teacher'].get('tel'))
# 4) 打印所有的学生的名字
b = class1['students']
print([x.get('name')for x in b])
# 5)计算所有学生的平均年龄
b = class1['students']
count = sum1 = 0
for x in b:
c = x.get('age')
sum1 += c
count += 1
print(sum1 / count)
# 6) 打印所有学生的联系人的名字
b = class1['students']
print([x['contacts'].get('name')for x in b])
# 7)打印所有联系人电话号码尾号是2的学生的名字
b = class1['students']
for x in b:
c = x['contacts'].get('tel')
if int(c) % 10 == 2:
print(x.get('name'))
2.遍历字典
方法1:
for 变量 in 字典:
循环体(注意,取的是键)
方法2:
for 键,值 in 字典.items()
3.字典的增删改、函数、相关方法
1.改 - 修改某个键对应的值
1)字典[键] = 新值 - 将字典中指定键对应的值修改乘指定的新值
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'gender': '母狗'}
dog['name'] = 'ww'
2.增 - 添加键对值
字典[键] = 新值
字典.setdefault(键, 值)- 在指定的字典添加键值对,键存在不会修改已存在的值
3.删
del 字典[键] - 删除字典中指定键,对应的键对值
字典.pop(键) - 取出字典中指定键,对应的键对值
print(dog.pop('name'))
print("--------------------分割线--------------------")
4.字典不支持 +、-、*、/、> 等
1). in 和 not in - 判断字典中是否存在指定的键
键 in 字典
2).相关函数 len dict
sum 不用—求的是键的值
1.len(字典) - 获取字典中键对值的数量
2.dict(数据) - 将指定的数据转换为字典
要求:
1.数据本身是一个序列
2.序列中的元素必须是有两个元素的小序列
3.小序列的第一个元素必须是不可变类型的数据
ps:字典转换为列表时,是将字典所有的键作为列表的元素
5.字典相关方法:字典.xxx()
字典.keys() - 获取字典所有的键,返回一个序列
字典.values() - 获取字典所有的值,返回一个序列
字典.items() - 将字典转换为一个序列,并将每一个键值对转换成一个元组
字典1.update(字典2) - 将字典2中所有的键对值都添加到字典1