第一章 1.6 数据类型之字典

一、字典

1、什么是字典

1)、字典:
  • 字典是容器型数据类型,将大括号{}作为容器的标志,里面多个元素用逗号隔开,字典中的元素只能是键值对:
  • 字典的可变性(支持增删改),无序性(不支持下标操作)
2)、键值对
  • 字典中所有元素都必须是键值对,键和值必须成对出现
  • 字典存数据存的是值,键只是用来区分不同的值的
  • 键 - 理论上是任何不可变的数据都可以,实际开发的时候一般将字符串作为键(key),在同一字典中键是唯一的
  • 值 - 可以是任何类型的数据
dict1 = {'dfg':34, 'a':True, 'o':[1,2], 'c':{'name':'小明'}}   #   值可以是任何数据
dict2 = {10:34, 'a':True, [1,2]:{'name':'小明'}}   #   键只能是不可变数据:数字,元组,字符串


二、字典的基本操作(增删改查)

1、查 --- 获取字典的值

1)、获取单个值

字典[key]------>获取字典中指定key对应的值,若key值不存在,报错
字典.get(key)------>获取字典中指定key对应的值,若key值不存在,不报错,返回None
字典.get(key,默认值)------>获取字典中指定key对应的值,若key值不存在,不报错,返回指定的默认值

person = {'name':'小明', 'age':'18', 'tel':'13888888888'}
print(person['age'])
print(person.get('age'))
2)、遍历

for key in 字典:
 循环体

其他遍历方法(效率较低)
for key,value in person.items():
 print(key, value)

2、增 / 改

字典[key] = 值

  • 若key在字典内存在,修改
  • 若key不在字典内,增加 'key':'值'
person = {'name':'小明', 'age':'18', 'tel':'13888888888'}
person['name'] = '小花'
person['分数'] = 89
print(person)

3、删 --- 删除键对

1)、del 字典[key] - 删除字典中指定key对应的键值对
del person['age']
print(person)
2)、字典.pop(key) - 取出字典中指定key对应的值(key对应的键值对会从字典消失)
person.pop('name')
print(person)

练习

# 练习,保存一个班的学生信息:姓名,学号,年龄,成绩,电话)一个班五个人
all_student = [
    {'name':'tom', 'age':20, 'score':80, 'tel':'13888888888'},
    {'name':'tony', 'age':13, 'score':90, 'tel':'13888888883'},
    {'name':'john', 'age':45, 'score':49, 'tel':'13888888884'},
    {'name':'tom2', 'age':35, 'score':73, 'tel':'13888888885'},
    {'name':'tom3', 'age':10, 'score':99, 'tel':'13888888886'}
]
# 1)统计以上学生中不及格学生的人数
n = 0
for student in all_student:
  if student[score] < 60:
    n += 1
print(n)

# 2)将打印所有未成年人学生的姓名
for student in all_student:
  if student[age] < 18:
    print(student[name])

# 3)将年龄为25岁以上的学生的电话号码设置为’保密’
for student in all_student:
   if student[age] > 25:
     student[tel] = '保密'
print(all_student)


三、字典的其他操作

1、运算符:== !=(不支持:+ * < > <= >=运算)

2、in / not in

key in 字典 / key not in 字典 - 判断key是否存在于字典中

3、len , dict

len(字典)------>字典的长度,键值对的个数
dict(数据)------>将指定的数据转换成字典;

数据的要求:

  • 1).数据本身是序列;
  • 2).序列中的元素也是序列;
  • 3).小序列中的元素智能有两个,第一个元素不可变

字典转换成列表 --- 将字典所有的key取出来作为列表的元素

4、字典.clear() - 清空字典

5、字典.copy() - 拷贝字典,返回新字典(相互不影响)

6、dict.fromkeys(序列,值) - 创建新的字典,将序列中的元素作为key,指定的值作为每个key的值,创建新字典

7、字典.items(),字典.values(),字典.keys()

1)、字典.key() -> 获取字典所有的key并且返回,返回的数据类型是序列但是不是列表
2)、字典.values() -> 获取字典所有的value并且返回,返回的数据类型是序列但是不是列表
3)、字典.items() -> 同时获取字典所有的key和value,返回一个序列,序列中元素是有两个元素的元祖,这两个元素分别是key和值

8、字典.setdefault(key, value) - 字典中添加键值对(key值存在时不会修改)

9、字典1.update(字典2) - 将字典2中的键值对添加到字典1中(不存在的就添加,存在的就覆盖)

练习

# 练习2:设计数据保存一个班的信息:
# 名字:python1906;
# 所有老师(名字,性别,联系方式,职位):
# 所有学生(姓名,毕业学校,电话,性别,年龄,紧急联系人(姓名,电话,关系))
class_1906 = {
  'class_name' : 'python_1906', 
  'all_teacher' : [
    {'name' : '张老师', 'gender' : '女', '职位' : '班主任', '联系方式' : '123451'},
    {'name' : '余老师', 'gender' : '女', '职位' : '讲师', '联系方式' : '123452'}
  ]
  'all_student' : [
    {'name' : '张三', 'gender' : '男', '年龄' : '25', '联系方式' : '123453', '紧急联系人' : {'name' : '李四', '关系' : '父子', '联系方式' : '12345678'}},
}
print(class_1906[all_student][-1]['紧急联系人'])
posted @ 2019-11-19 20:48  anjhon_木  阅读(197)  评论(0编辑  收藏  举报