• 第十四节课:字典


    # 2020.09.30  字典
    # 1.字典的定义与特性
    # 2.字典的常用操作
    # 3.字典的遍历
    # -- 1 字典的定义
    # 存储学生的信息时,涉及到学生的姓名.年龄.身高.体重,如果没有字典,只能写成如下形式
    # [
    # ('Mike',25,180,80)
    # ('Jake',25,178,68)
    # ]
    # 但是这种写法有个问题,信息是用列表+元组组成的,元组中的元素是不可以更改的
    # 就算是换成列表套列表,但是这样就信息不明确:
    # namelist=[
    # ['Mike',25,180,80]
    # ['Jake',25,178,68]
    # ]
    # print(namelist[0][1]) 这个代码表述不明确,且一旦插入另一对象所有代码都得改
    # 如果没有字典,传统方法有三大缺陷:
    # -不清晰:
    # age=students[0][1] #传统方式
    # students['Mike']['age'] #字典的方式
    # -查找麻烦:
    # 需要遍历式的查找 #传统的方式
    # 给出Key就可以得到students['Mike']['age'] #字典的方式
    # 性能特别高 #字典的方式
    # -扩展性差:
    # 如果需要加一个字段,只能在后面加,不然老代码就会有问题 #传统的方式
    # 随意添加字段.dictionary没有顺序 #字典的方式
    # 所以引入字典的概念
    # --内置类型:字典
    # dict1={}
    # dict2={'name':'Jack','age':30}
    # key,value 的概念:
    # key包含了dict2{'name'} dict2{'age'}
    # 就像真正的字典前面的索引
    # 访问不存在的key,会导致程序异常
    # dict2.get('name',default=None)
    # dict1={{}:12}
    # # print(type(dict1)) #<class 'dict'>
    # print(dict1)
    # 字典的定义与特性:
    # 1.键值成对出现的
    # 2.键的类型可以是字符串,int,float,元组,布尔
    # 不能是:列表 报错unhashable type: 'list'
    # 字典 报错 unhashable type: 'dict'
    # 值的类型是任意类型
    # 3.字典可以改变值
    # 4.字典是无序的,没有顺序就没有下标,不像列表
    # 5.键永远是唯一的
    # eg:怎么获取以下字典的值
    # dict2={'name':'Jack','age':30}
    # print(dict2)
    # #字典是通过键来获取值的
    # print(dict2['name']) #所以直接打印想要获取的值的键名就行了,键是字符串打印就需得是字符串
    # --拓展,如果值是字典,怎么获取值的字典里面的键?如:
    # dict2={'name':'Jack','age':{'info':23}}
    # print(dict2['age']['info'])#得23;直接打印字典名[键名][嵌套字典的键名]
    ##嵌套的方法在接口自动化里面有很多,是常用操作
    # -- 2 字典的特性
    # 1.字典是mutable的
    # 2.可以存储任意数量的元素
    # 3.可以存储任何python数据类型
    # value可以是任意类型
    # key 可以是hash的类型,最常用也是最高效的是数字或者字符串
    # 4.以key:value,即"键:值"对的形式存储数据,每个键是唯一的
    # 5.根据键来找值效率非常高

    # -- 2 字典的常用操作
    # 1.查询操作
    # 获取值--字典通过键去获取值
    # dict={'奇数':1,'偶数':{'first':2,'second':6}}
    # print(dict['偶数']['second']) #嵌套字典查询,接口自动化常用操作
    # print(dict['自然数']) #如果字典获取的键不存在,会报错KeyError: '自然数'

    # 2.修改操作:通过键去修改,前提是--键得存在!!!
    # dict['要修改的键名']='修改之后的键值' eg:
    # dict={'奇数':1,'偶数':{'first':2,'second':6}}
    # print(dict) #得:{'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # dict['偶数']='6'
    # print(dict) #得:{'奇数': 1, '偶数': '6'}

    # 3.增加 通过键去增加键值对,--键不存在!!! eg:
    # dict={'奇数':1,'偶数':{'first':2,'second':6}}
    # dict['自然数']='anything'
    # print(dict) #得:{'奇数': 1, '偶数': {'first': 2, 'second': 6}, '自然数': 'anything'}

    # 4.判断键存不存在,用in eg:
    # dict={'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # print('自然数' in dict) #打印返回的是布尔值False

    # 5.删除 也是通过键来删除
    # 没有remove方法,因为不通过值来删除 只有另外两种方法适用于字典的删除
    # dict={'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # # del dict['偶数']['second'] #或者写成dict.pop('键名'),但这样不能删除嵌套的字典
    # print(dict) #得{'奇数': 1, '偶数': {'first': 2}},说明可以嵌套字典删除

    # 6.查看字典有多少元素 元素的个数 len()函数
    # dict={'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # print(len(dict)) #得2,说明len()函数得到的就是键值对的个数

    # 7.清空 dict.clear() 注意清空操作,字典地址没有变化,在原有地址清空内容 eg:
    # dict={'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # dict.clear()
    # print(dict) #打印出来得: {} 字典dict已经被清空了

    # 8.赋值 dict={} 注意赋值操作,字典的地址是变化了的,重新赋值新地址 eg:

    # 9.获取所有的key dict.keys() 返回的是类列表 eg:
    # dict={'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # print(dict.keys()) #打印得:dict_keys(['奇数', '偶数'])
    # 因为获取到的key数量不定,考虑到存储时应该存为什么类型,所以keys()获取到的
    # dict_keys(['奇数', '偶数'])类型是 --类列表
    # 类列表特点:1.不支持下标 2.支持遍历操作 演示:
    # dict={'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # print(dict.keys()[0]) #如果是列表,可以通过下标获取值,这里不支持下标
    # 但是这里报错:'dict_keys' object does not support indexing 说明不是列表
    ###但是可以遍历,支持for循环操作
    # dict={'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # for one in dict.keys():
    # print (one) #打印得键名,分行写的,说明可以支持for循环
    # 如果真的想让keys()函数返回的是列表,可以使用下标,那就强制转化 演示:
    # dict={'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # print(list(dict.keys())) #返回的 ['奇数', '偶数']
    # print(list(dict.keys())[0]) #返回的 奇数

    # 10.获取所有的value: dict.values() 返回的也是类列表 eg:
    # dict={'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # print(dict.values()) #打印得:dict_values([1, {'first': 2, 'second': 6}])
    # --获取到值之后就可以查询某个值是否在这个字典里面,用in 如:
    # dict={'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # print('奇数' in dict.values()) #打印得False

    # 11.获取所有的键值对 dict.items(),返回的是类列表 eg:
    # dict={'奇数': 1, '偶数': {'first': 2, 'second': 6}}
    # print(dict.items())
    # 打印得:dict_items([('奇数', 1), ('偶数', {'first': 2, 'second': 6})])

    # 字典的常用操作 --字典的合并 也经常用作字典的新增 dict.update(字典) eg:
    # dict1={'one':5,'two':2}
    # dict2={'re':6,'al':6} #字典2可以命名,也可以直接加到下面的update中
    # dict1.update(dict2) #直接用update(合并要合并的字典内容)
    # print (dict1) #打印得:{'one': 5, 'two': 2, 're': 6, 'al': 6}

    # -- 3 字典的遍历
    # 字典的for循环本质是对键进行操作的
    # dict={'one': 5, 'two': 2, 're': 6, 'al': 6}
    # for one in dict:
    # print(one) #循环得到的是键:one two r al
    # for one in dict.items():
    # print(one,end=' ') #打印得:('one', 5) ('two', 2) ('re', 6) ('al', 6)
    # 以上又是对键值对进行循环,由此可见,for是根据循环对象来进行循环的
    # 上面的for循环中吧one替换成a,b可行吗?
    # dict={'one': 5, 'two': 2, 're': 6, 'al': 6}
    # for a,b in dict.items():
    # print(a,b,end=' ') #打印得:one 5 two 2 re 6 al 6

    # -- 3 字典的使用
    # 不同的数据类型,各有各的用途
    # 一些简单的数据,无需字典,列表就可以了
    # 字典是无序的,如果需要按顺序,则不能使用字典
    # 扩展内容:json和字典的区别以及转换
    # 1.json--是一种字符串 数据必须用双引号
    # 字典--是一种数据类型
    # 2.import json json.dumps() 字典转换成json eg:
    # import json #使用json需要先调用json
    # dict={'one':5,'two':2} #是一个字典
    # print(json.dumps(dict)) #打印得:{"one": 5, "two": 2}

    # 3.json.loads() json转成字典,改变的是原数据类型
    # 原因是字符串不能改数据,可以改成字典再改数据,然后再转成字符串
    # jso1='''{"one": "5",
    # "two": 2
    # }''' #是一个json字符串,比字典多了两个引号
    # print(type(jso1)) #打印得:<class 'str'>
    # dict=json.loads(jso1) #json转字典用loads(),字典转json()用dumps()
    # print(dict) #打印得:{'one': 5, 'two': 2},
    # print(type(json.loads(jso1))) #打印得<class 'dict'>
    # dict['one']='6'
    # print(dict) #打印得:{'one': '6', 'two': 2},数据改好了,现在要转回字符串了
    # str11=json.dumps(dict) #注意:dumps()和loads()前面都是json
    # print(type(str11)) #打印得:<class 'str'>


  • 相关阅读:
    团队作业 总结
    个人作业 Alpha项目测试
    第二次作业
    交互式多媒体图书平台的设计与实现
    基于VS Code的C++语言的构建调试环境搭建指南
    码农的自我修养之必备技能 学习笔记
    工程化编程实战callback接口学习
    如何测评一个软件工程师的计算机网络知识水平和编程能力
    深入理解TCP协议及其源代码
    Socket与系统调用深度分析
  • 原文地址:https://www.cnblogs.com/66-liu/p/13831902.html
Copyright © 2020-2023  润新知