1. '''
    字典是python中唯一的验证类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算。
    根据计算的结果决定value的存储地址。所以字典是无序存储的。且key必须是可哈希的。可哈希表示key必须是不
    可变类型。如:数字,字符串,元组。
  2.  
  3. 字典是除列表以外,python中最灵活的内置数据结构类型,列表是有序的对象结合。字典是无序的对象集合。
    两者的区别在于:字典中的元素是通过键来存取的,而不是通过偏移存取。
    '''
  1. #不可变类型:整型,字符串,元组
    #可变类型:列表,字典
  1. #1.字典的创建,字典中的key是不可改变的。因此列表,字典不能做字典中的键,只能用整型,字符串,元组来做key
  1. dic1 = {'name':'张三','age':27,'sex':'male'} #冒号前面的是key,后面的是value
  2. dic2 = {[1,2,3]:"张三",'age':27,'sex':'male'} #列表[1,2,3]不能做key,TypeError: unhashable type: 'list'
  3. dic3 = {'name':'张三','age':27,'sex':'male','hobby':{'name':'ceshi','age':45}} #字典可以做字典中的值
  4. dic2 = dict((('name','alex'),)) #一般不适用,太麻烦
  1. #字典的两大特点:无序,键唯一
  1. #2.操作字典
    #(1).增加 如果键存在,则会改变原来字典中的该键对应的值,如果键不存在,则新增一个键值对
    #直接在原字典后面跟一个[],赋给[]中键一个值
  1. dic1 = {'name':'Alex'}
  2. dic1['age'] = 18
  3. dic1['name']=18
  4. print(dic1)
  5. #使用setdefault方法,setdefault方法有返回值。
  6. ret1 = dic1.setdefault('age',34) #如果字典中有这个键,则原来的键不做任何的变动。返回字典中相应的键值。
  7. print(ret1)
  8. ret2 = dic1.setdefault('hobby','girl') #如果没有这个键,则则在字典中新增一个键值对,并返回相应的值。
  9. print(ret2)
  10. print(dic1)
  1. #(2).查 通过键查找。
  1. dic3 = {'name':'张三','age':27,'sex':'male'}
  2. print(dic3['name'])
  3. #打印一个字典中有哪些键
  4. print(dic3.keys())
  5. print(type(dic3.keys()))
  6. #将dict_keys类型转换成list类型
  7. print(list(dic3.keys())) #取出所有的键
  8. print(list(dic3.values())) #取出所有的值
  9. print(list(dic3.items())) #取出所有的键值对
  1. #(3).改
  1. dic3 = {'name':'张三','age':27,'sex':'male'}
  2. dic3['name'] = 'Alex'
  3. print(dic3)
  1. dic4 = {'name':'张三','age':27,'sex':'male'}
  2. dic5 = {'':'','':''}
  3. dic4.update(dic5) #类似于列表中的extend方法,如果原来的字典中有相应的键,则更新原键值,如果没有,则添加新的键值对。
  4. print(dic4)
  5. print(dic5)
  1. #(4).删
  1. dic5 = {'name':'Maren','age':27,'sex':'male'}
  2. del dic5['name'] #del删除的是一个键值对
  3. print(dic5)
  4.  
  5. dic5 = {'name':'Maren','age':27,'sex':'male'}
  6. dic5.clear() #clear 清空整个字典,剩下一个空字典
  7. print(dic5)
  8.  
  9. dic5 = {'name':'Maren','age':27,'sex':'male'}
  10. print(dic5.pop('age')) #pop返回被删除的键值对的值
  11. print(dic5)
  12.  
  13. dic5 = {'name':'Maren','age':27,'sex':'male'}
  14. a = dic5.popitem() #随机删除某组键值对,并以元组的方式返回值
  15. print(a,dic5)
  16.  
  17. dic5 = {'name':'Maren','age':27,'sex':'male'}
  18. del dic5 #从内存中清空了整个字典,运行会报错。
  19. print(dic5)
  1. #(5).其他操作以及涉及到的方法
  1. #5.1.dict.fromkeys() 基本不用
  1. dic6 = dict.fromkeys(['host1','host2','host3'],'test') #所有键都给指定同一个值:test
  2. print(dic6)
  3.  
  4. dic6 = dict.fromkeys(['host1','host2','host3'],['test1','test2'])
  5. print(dic6)
  6. dic6['host2'][1] = 'Alex'
  7. print(dic6) #{'host1': ['test1', 'Alex'], 'host2': ['test1', 'Alex'], 'host3': ['test1', 'Alex']}
  1. #5.2 d.copy() 对字典d进行浅复制,返回一个和d有相同键值对的新字典,后面重点讲解
  1. #5.3 字典的嵌套
  1. #汽车品牌
  1. car = {
  2. "美国":{
  3. "别克":["SUV的自动停车功能好","车比较肉"],
  4. "凯迪拉克":["车标酷炫","百公里加速性不好"],
  5. "道奇":["有皮卡,性能好","在国外卖不动"],
  6. "悍马":["安全性能极高","太贵了"]
  7. },
  8. "日本":{
  9. "本田":["油耗低","安全性能差"],
  10. "丰田":["提速快","车型不好看"]
  11. },
  12. "中国":{
  13. "红旗":["车型好看","定价高"],
  14. "传祺":["价格适中","质量有问题"]
  15. }
  16. }
  17.  
  18. #修改别克的质量,车不肉了
  19. car["美国"]["别克"][1] = "车不肉了,做了改进"
  20. print(car)
  1. #5.4 字典的排序
  1. # sorted(dict):返回一个有序的包含字典所有key的列表
  1. dic = {5:"",3:"",8:"",4:""}
  2. print(dic)
  3. print(sorted(dic))
  4. print(sorted(dic.keys()))
  5. print(sorted(dic.values()))
  6. print(sorted(dic.items()))
  1. #5.5 字典的遍历
    #字典的遍历非常重要,多练习
  1. dic5 = {'name':'Maren','age':27,'sex':'male'}
  2.  
  3. for i in dic5: #默认循环遍历字典的键
  4. print(i)
  5. print("--------------------------")
  6. #如何遍历字典中的键和值
  7. #1.通过键值,取值.推荐使用这种方法
  8. for i in dic5:
  9. print(i,dic5[i])
  10. print("--------------------------")
  11. #2.遍历字典的items
  12. for i in dic5.items():
  13. print(i)
  14. print("--------------------------")
  15. #3.通过枚举取值
  16. for i,v in dic5.items():
  17. print(i,v)
  1.  

我的Python自学之路-002 字典的知识的更多相关文章

  1. 我的Python自学之路-003 字符串的知识

    '''字符串是以引号或者单引号括起来的任意文本,例如"123","asdfjk",'adfa'引号或者单引号,只是一种表示方法,并不是字符串的一部分如果字符串本 ...

  2. 我的Python自学之路-001 列表的知识

    #_date_:2020/9/11 '''列表和字典是python中用的最多的数据类型 假如要存储一个班级的人名,需要怎么做?有这么几种方法:1.定义很多个变量: name0 = 'wucaho' n ...

  3. Python自学之路---Day13

    目录 Python自学之路---Day13 常用的三个方法 匹配单个字符 边界匹配 数量匹配 逻辑与分组 编译正则表达式 其他方法 Python自学之路---Day13 常用的三个方法 1.re.ma ...

  4. Python自学之路---Day01

    目录 Python自学之路---Day01 注释 单行注释 多行注释 print()函数 语法 参数 实例 input()函数 语法 参数 实例 查看Python的关键字 代码 变量与常量 变量 如何 ...

  5. python 自学之路-Day Two

    Day1补充部分 模块初识 模块就是由其他人写好的功能,在程序需要的时候进行导入,直接使用,也叫库. 库有标准库和第三方库,所谓标准库,就是不需要安装就可以直接使用的,自带的:第三方库,就是需要进行下 ...

  6. python 自学之路-Day one

    一.Python介绍 创始人吉多范罗苏姆(龟叔),脚本解释程序 应用领域广,数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等. 主要应用领域: 云计算:OpenStack: WEB开发:经 ...

  7. Python自学之路

    2020年春节,受新型冠状病毒影响,整个春节假期,全国人民都在恐慌之中,为了避免大家上班相互传染,公司号召国家政策,开始上班日期延迟,在家呆的实在太无聊,突然感觉自己不能浪费这美好的时光,决定学习Py ...

  8. Python自学教程7:字典类型有什么用

    字典是Python中的一个重要操作,如果字典玩得顺,很多其他的数据类型就可以一通百通. Python字典的定义 字典使用一对大括号进行定义,键值对之间使用逗号隔开,键和值使用冒号分隔. 键必须是不可变 ...

  9. Python自学之路——自定义简单装饰器

    看了微信公众号推送的一道面试题,发现了闭包的问题,学习时间短,从来没有遇到过这种问题,研究一下. Python函数作用域 global:全局作用域 local:函数内部作用域 enclosing:函数 ...

随机推荐

  1. 浏览器自动化的一些体会9 访问angular页面的一个问题

    发现浏览器自动化有一个重要方面没有提及,即所谓的无页面浏览器,不过最近没有需求,不想尝试,先记上一笔,以后有需求时,可以有个思路. 大约一两个月前(现在比较懒散,时间不知不觉过去,连今天是几号有时候都 ...

  2. 快速搭建一个Vue-cli项目(简单到爆炸)

    引言: 2013-2020年,这7年是web前端技术的一个高速发展期,也是前端开发岗位的考验期. 在我接触前端时,JQuery十分热门,开发者从原生JS到JQ的应用,可以说是大大提高了开发效率,也被广 ...

  3. Docker 的前世今生

    虚拟化 「要解释清楚 Docker,首先要解释清楚容器(Container)的概念」.要解释容器的话,就需要从操作系统说起.操作系统太底层,细说的话一两本书都说不清楚.这里就一句话来总结一下:操作系统 ...

  4. Java之reflection(反射机制)——通过反射操作泛型,注解

    一.反射操作泛型(Generic) Java采用泛型擦除机制来引入泛型.Java中的泛型仅仅是给编译器Javac使用的,确保数据的安全性和免去强制类型转换的麻烦.但是编译一旦完成,所有和泛型有关的类型 ...

  5. Jmeter 常用函数(12)- 详解 __machineName

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 返回机器(电脑)名称 语法格式 ${_ ...

  6. Keras结合Keras后端搭建个性化神经网络模型(不用原生Tensorflow)

    Keras是基于Tensorflow等底层张量处理库的高级API库.它帮我们实现了一系列经典的神经网络层(全连接层.卷积层.循环层等),以及简洁的迭代模型的接口,让我们能在模型层面写代码,从而不用仔细 ...

  7. 仓库ERP管理系统(springboot)

    查看更多系统:系统大全,课程设计.毕业设计,请点击这里查看 01 系统概述 基于SpringBoot框架和SaaS模式,非常好用的ERP软件,目前专注进销存+财务功能.主要模块有零售管理.采购管理.销 ...

  8. Linux图形界面安装Oracle11G(Centos7)

    以Centos7为列 创建运行Oracle数据库的系统用户和用户组 #切换root用户 [px@localhost /]$ su - root [px@localhost /]$ su - root ...

  9. SpringBoot启动注解源码流程学习总结

  10. mysql 8.0.19 win10快速安装教程

    本文教程为大家分享了mysql 8.0.19安装教程,供大家参考,具体内容如下 1.下载.zip安装文件 2.根目录存放my.ini,文件路径用“/”分割,例如: [mysqld] port=3306 ...