字典和元组
三目运算符
语法:
表达式2 if 表达式1 else 表达式3 --判断表达式1是否成立,如果成立,结果为表达式2,反之结果为表达式3
字典
字典(dict)
1)字典是容器型数据类型,将{}作为容器的标志,里面多个键值对用逗号隔开:{键1:值1,键2:值2…}
2)字典是可变的(支持增删改);字典是无序的(不支持下标操作)
3)元素的要求:字典的元素是键值对
键的要求:a.键必须是不可变的类型数据(一般使用字符串) b.键是唯一的
值的要求:没有要求
字典和列表的选择:
如果同时保存的多个数据意义相同(都是描述同一种类数据)时,使用列表
如果同时保存的多个数据的意义不同,使用字典
字典的查
查单个
查单个-获取字典某一个键对应的值
1)字典[键]-获取字典中指定键的对应值,如果键不存在会报错
2)字典.get(键)–获取字典中指定键的对应值,如果键不存在,返回None
字典.get(键,默认值)-获取字典中指定键的对应值,如果键不存在,返回默认值
dog={'name':'旺财','age':3,'breed':'土狗','gender':'母狗'}
print(dog['name'],dog['age'],type(dog['name']),type(dog['age']))
print(dog.get('breed'))
# print(dog['color']) # 报错
print(dog.get('color')) # None
print(dog.get('color','白色')) # 白色
实际应用:
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['class_name'],class1['address']) # Python2204 15教
# 2) 打印班级讲师的名字和年龄
print(class1['lecturer']['name'],class1['lecturer']['age']) # 婷婷 18
# 3) 打印班主任的电话
print(class1['class_teacher']['tel']) # 110
# 4) 打印所有的学生的名字
# 方法1
students=class1['students']
for i in students:
print(i['name'])
# 方法2
result=[i['name']for i in class1['students']]
print(result)
# ['stu1', 'stu2', 'stu3', 'stu4', 'stu5', 'stu6']
# 5)计算所有学生的平均年龄
# 方法1:
all_student=class1['students']
total_age=stu_count=0
for stu in all_student:
total_age+=stu['age']
stu_count+=1
print('平均年龄:',total_age/stu_count)
# 平均年龄: 23.833333333333332
# 方法2:
age=[i['age']for i in class1['students']]
print(int(sum(age)/len(age)))
# 6) 打印所有学生的联系人的名字
# 方法1
result=[i['contacts']['name']for i in class1['students']]
print(result)
print('-------------------------------分割线----------------------------------------')
# 方法2
all_student=class1['students']
for i in all_student:
print(i['contacts']['name'])
# ['张三', '小明', '小花', '李四', '王五', '赵六']
# 7)打印所有联系人电话号码尾号是2的学生的名字
# 方法1
result=[i['name'] for i in class1['students'] if int(i['contacts']['tel'])%10 ==2]
result1=[i['name'] for i in class1['students'] if (i['contacts']['tel'])[-1] =='2']
print(result)
print('-------------------------------分割线----------------------------------------')
# 方法2
for stu in class1['students']:
if stu['contacts']['tel'][-1]=='2':
print(stu['name'])
# ['stu2', 'stu3', 'stu5']
# 利用列表表达式的效率比循环低
如果字典套字典,可以直接利用字典[键][键]
直接求值
如果字典套列表再套字典,可以利用字典[键][键]
再利用循环求值
遍历
语法:
方法1:
for 变量 in 字典:
循环体(变量获取到的是字典的键)
方法2:
for 键,值 in 字典.item():
循环体
dog={'name':'旺财','age':3,'breed':'土狗','gender':'母狗'}
for i in dog:
print('i',i,dog[i])
'''
运行结果:
i name 旺财
i age 3
i breed 土狗
i gender 母狗
'''
for key,value in dog.items():
print(key,value)
'''
运行结果:
name 旺财
age 3
breed 土狗
gender 母狗
'''
字典的增删改
1)改-修改某个键对应的值
字典[键]=新值 -将字典中指定键的对应的值,修改成新值
2)增 -增加键值对
字典.[键]=值 --如果键不存在,添加键值对,如果键存在,修改值
字典.setdefault(键,值) --如果键不存在,添加键值对,如果键存在,不会修改值
3)删-删除键值对
del 字典[键]-删除指定键值对
字典.pop(键) --取出指定键对应的值,当值被取出,键也消失
字典的相关操作
1.字典只支持==
比较,结果为True/False
字典支持 in ,not in -判断字典中是否含有指定键
键 in 字典
键 not in 字典
dict1={'a':10,'b':20,'c':20}
print(10 in dict1) # False
print('a' in dict1) # True
2.相关函数:len
,dict
,其他求和排序没有实际应用的意义
len(字典)–获取字典中键值对的数量
dict(数据)-将指定的数据类型转换字典
转换要求:
a.数据本身是一个序列
b.序列中的元素必须是有两个元素的小序列
c.小序列的第一个元素必须是不可变的数据类型
注意:字典换列表时,字典所有键作为列表的元素
3.相关方法:字典.xxx()
1)字典.clear() -清空字典
2)字典.copy()-复制字典,产生相同的字典
3)字典.keys() -获取字典所有的键,返回一个序列
字典.values() -获取字典所有值,返回一个序列
字典.items() -将字典转换成一个序列,每一个键值对转化成一个元组
4)字典1.update(字典2) -将字典2的键值对添加的字典1中
元组
元组是不可变的列表,列表中和可变性无关的内容元组全部支持