大家好,我是小白,书接上回,我们目前已经了解到了Python中很常见的一种数据类型:List,也初步掌握了一些Python自带的有关List的方法,今天为大家介绍另外一种异常火爆的数据结构:字典Dictionary,不夸张的讲,基本上我们熟悉了列表和字典后有关数据结构这里就差不多啦,实际的项目中应用的最多的也是这两种,至于其他的Set,Tuple平时用的不多~

字典到底是什么

简单来说,字典是另一种可变数据类型,且可存储任意类型对象。就是说字典里面存储的值我们可以修改~
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

d = {                    #这里d的结构就是一个字典<key>: <value>,      #基础的数据结构就是一个key=>value<key>: <value>,...<key>: <value>
}

键必须是唯一的,但值则不必。值可以取任何数据类型,我会在接下来用详细的例子详细解释。
如果我们要把字典和列表做一个对比总结的话,可以发现如下特点:

  • 列表和字典的值都可以被修改
  • 列表和字典都是动态结构,也就是说可以任意插入值,无限扩展
  • 列表中获取值的方式是通过Index(索引)
  • 字典中获取值是通过key(键)
  • 列表字典都可以层次嵌套,比如一个列表中的值可以是另一个列表,

好啦,让我们现在开始今天的栗子吧~

Dictionary字典常用方法(内含扎心举例):

创建一个字典

首先,不知道有没有小白朋友们感到疑惑,既然已经有列表了,为啥还需要字典这种数据结构 ?原因很简单哈哈,出于实际需要,我来举个令人伤心的例子说明:

你是北京知名985,211毕业的北漂有为青年xiaobai,躲过了这轮互联网寒冬,23岁的你每天最爱穿着格子衫去街角咖啡厅点一杯可以无限续杯的伯爵红茶,顺便打量着周围45度仰脸拍抖音的小姐姐,意淫着一些不可告人的事情,这时来了一个青春无比的妹子,交谈甚欢后,同为北漂的她得知你技术入股进入一家创业公司,以及老板忽悠你的超级大饼和期权,内心狂喜,碰到潜力股了呀,程序猿呀,技术入股呀 !而你以多年老司机经验用余光扫描了妹子的三围,得出结论大概是82,62,82后,立刻邀请她去厕所做了一些羞羞的事情( 此处省略 6秒 ),几个月后迅速结婚然后生了一个丑萌的孩子...

好啦,请你把这段经历用列表来表示一下 ? WTF! 答案几乎不可能,但是用字典的话某种程度上会解释的清楚一些~ 哈哈
如果用列表,就只能这么表示:

young_man = ['xiaobai',985,23,'Developper'.......]

完全不懂在说啥呀...但是如果用字典会舒服的多:

     young_man = {'first_name':'bai','family_name':'xiao','age':23,'city':'Beijing','university_rank':'985','university_name':'beida','job':'Developer','salary':20000.00,'company':'Start Up','married':True,'wife_measurements':[82,62,82],'number_of_children':1,'future':None}

瞬间感觉信息量暴涨有木有 ! 其实当我最开始接触字典的时候,我对它的第一感觉是经过select语句从数据库查询出的一个结果哈哈~, 好啦,让我们查看一下我们创建的这个字典:

print(young_man)
Out:    {'first_name': 'bai','family_name': 'xiao','age': 23,'city': 'Beijing','university_rank': '985','university_name': 'beida','job': 'Developer','salary': 20000.00,'company': 'Start Up','married': True,'wife_measurements': [82, 62, 82],'number_of_children': 1,'future': None}

大家可以发现输出的格式和创建的格式基本一样,都是符合上面我们提到过的key=>value 的形式,这里我们创建了一个字典并把字典的值赋给变量young_man,几点需要大家注意:

  • 字典的键是唯一的,类型也可以为int,我这个例子都是str类型,但是基本int类型的极少
  • 在'university_name':'985' 这组信息中985是字符型,但是底下"number_of_children"的值为1,1是int型
  • 字典的值可以是一个列表或者另一个列表,比如这里'wife_measurements’是指xiaobai老婆的三围,那可以传递一个包含三个值的列表,这也是我们上面说到过的列表字典都可以相互嵌套
  • 字典的值可以是任意类型,比如这里的"future":None, 因为,因为你没有未来啊,啊哈哈

访问字典里的值

现在我们已经成功创建了一个字典,那么如何获取字典中的值呢?我们知道在List中可以通过切片[start_index:end_index]来获取,字典里提供了另一种形式:

dict[name_of_key]   #把相应的键放入到方括号中

现在让我们获得xiaobai的姓和工资:

    print("The first name of young man is :", young_man['first_name'])print("Salary of young man:",young_man['salary'])Out: The first name of young man is: baiSalary of young man: 20000.00

很简单吧,如果是xiaobai老婆的三围呢?

    print(young_man['wife_measurements'])
Out:[82, 62, 82]

如果就对胸围感兴趣呢? 因为'wife_measurements'这个键对应的值为一个列表,我们可以接着使用列表获取值的方法:

     print('The Bust measure is',young_man['wife_measurements'][0],'cm')
Out: The Bust measure is 82 cm

如果对所有的值都感兴趣呢?那很简单,字典提供了一个非常简单的方法values():

     print(young_man.values())
Out:dict_values(['bai', 'xiao', 23, 'Beijing', '985', 'beida', 'Developer', 10000, 'Start Up', True, [82, 62, 82], 1, None])

这样我们就获得young_man里面所有的值了

访问字典里的键

不用多解释,很简单,也是一个自带的方法.keys():

        print(young_man.keys())Out: dict_keys(['first_name', 'family_name', 'age', 'city', 'university_rank', 'university_name', 'job', 'salary', 'company', 'married', 'wife_measurements', 'number_of_children', 'future'])

访问字典里的键和值

经过上面的介绍,我们可以分别获得字典的值和键,现在我们要把他们融合一下,其实很简单,因为本身字典可以迭代:

    for k,v in young_man.items():print(k,":",v)Out:first_name : baifamily_name : xiaoage : 23city : Beijinguniversity_rank : 985university_name : beidajob : Developersalary : 10000company : Start Upmarried : Truewife_measurements : [82, 62, 82]number_of_children : 1future : None

字典里有一个方法:.items(),说白了就是获取到当前的键和值,这里我们用一个for循环可以迭代这个字典,分别输出键和值,这里注意一下,k,v是什么不重要,大家可以把k,v换成其他的字母都是没有问题的,有关字典的很多实用技巧我们下一期会讲。

添加,修改字典里的值

结婚1年后的你攒了10万块,加上6个钱包的100万在北京付了首付,买来了小两居,然而丑萌的孩子,漂亮的老婆,加上房子的月供让你不堪重负,好在经过你的努力,现在的工资已经涨到了3万,变成了传说中的产品经理,身旁电视里响起共克时艰的号召,看似美好的生活向你招手,但坏消息突然接踵而至,首先第二个孩子的出生让你的经济状况雪上加霜,你在感叹杜蕾斯的产品质量同时突然发现事情有些不对......

你忽然回忆起很多细节,最近几个月赶项目,经常在深夜回家时发现一辆扎眼的保时捷正开出小区,到家时妻子经常满面潮红的刚刚洗完澡出现在你面前, 你经常关注着中兴老员工跳楼,xxx创业失败煤气自杀等负面新闻,却忽略了妻子钱包多出来的各种美容健身购物酒店卡....

眼前冒绿星的你心中一凉,拿起土著的照片看了看,又看看自己怀里新出生的老二,眉宇间竟有几分相似,脑袋嗡的一声后决定要去做亲子鉴定...

首先先让我们看看如何在字典里新加一个值,让我们把xiaobai的银行存款和买加进去:

young_man['bank_account']=100000
young_man['Own_house']=True

其实很简单啦,只要把ke和value按照图中形式添加就好了,这个时候我们再看young_man这个字典就会发现已经多了两个值:

{'first_name': 'bai', 'family_name': 'xiao', 'age': 23, 'city': 'Beijing', 'university_rank': '985', 'university_name': 'beida', 'job': 'Developer', 'salary': 20000.0, 'company': 'Start Up', 'married': True, 'wife_measurements': [82, 62, 82], 'number_of_children': 1, 'future': None, 'bank_account': 100000, 'Own_house': True}

其次,xiaobai的职业,薪水,和孩子的数量有了变化,此时需要对字典中对应的值进行修改,这里十分简单:

young_man['age']+=1
young_man['job'] = 'Product Manager'
young_man['salary']=30000.00
young_man['number_of_children']=2

再看一下现在的young_man:

{'first_name': 'bai', 'family_name': 'xiao', 'age': 24, 'city': 'Beijing', 'university_rank': '985', 'university_name': 'beida', 'job': 'Product Manager', 'salary': 30000.0, 'company': 'Start Up', 'married': True, 'wife_measurements': [82, 62, 82], 'number_of_children': 2, 'future': None, 'bank_account': 100000, 'Own_house': True}

此外如果修改多个值,用update()是最方便的,我们下一篇笔记会说~

删除字典里的值

医院的结果出来了,不出意料,杜蕾斯质量没问题,你迅速回到家中准备兴师问罪,却发现妻子早已准备好了离婚协议,在暴怒之中的你想也没想就选择了净身出户,把所有的一切都留给了妻子,自己没日没夜地工作期待有一天公司上市自己套现离场,继续开始人生下半场,然而一切都是命中注定,不知怎么,你也成为了《就算老公一毛钱股份都没拿到,在我心里,他依然是最牛逼的创业者》里的主角,命运向你展示了它狰狞的一面,你最后的希望随之破灭,终日借酒浇愁。

在一个百无聊赖的晚上,你带着仅有的几千块钱做了一次高级大保健,负责给你服务的小姐姐名叫skyler,来自美国新墨西哥州的Albuquerque市,人生失意的你唱着崔健的<<一无所有>>和她倾诉了自己的前半生,笑靥如花的小姐姐安慰了你,向你描述了美利坚大地上美好的一切和自己同样悲惨的前半生,同时天涯沦落人,相逢何必曾相识!

伴随着大保健配套的bgm《沙漠骆驼》,醉眼朦胧的你仿佛看到了遥远的Albuquerque市,便宜的大别墅和skyler的笑脸,一切尽在咫尺,却又遥不可及。。。

回到正题,这里xiaobai选择净身出户,因此很多属于他的东西全部没了,删除字典中的值很简单,只需要del关键字:

这里删除的东西有点多,我利用了上篇笔记讲过的知识,首先建立了一个列表,装入young_man的想要删除的键值,然后利用迭代一次删除,这并不是一个优雅的方法,但是目的是让大家看一下列表和字典的一个结合操作,现在再看一下young_man:

{'first_name': 'bai','family_name': 'xiao','age': 24,'city': 'Beijing','university_rank': '985','university_name': 'beida','future': None}

这个时候如果我们还想看看银行存款是不可能的了,如果我们尝试老方法:

young_man['bank_account']   # ERROR

会很容易的报错,因为在字典中已经没有这个值了,为了避免报错,我推荐大家使用get方法:

print(young_man.get('bank_account','Not Found'))  # 如果没有输出Not Found
Out: Not Found

创建字典的其他方式*

还未到30的你做出了一个人生中最重要的决定,那就是和skyler一起去她的老家Albuquerque市,从零开始
你用你仅存的化学知识在当地的高中谋取到了一个化学老师的工作,利用自己姓名xiaobai起了一个地道的美国名字:Walter White, 小城市的生活悠闲惬意,当地的炸鸡店“Los Pollos Hermanos”味美绝伦,你和skyler也有了爱的结晶,又一个丑萌而且先天残疾的孩子出生了。。

此时的xiaobai已经有了全新的身份,这里我们换一种方式创建他的全新个人信息:

walter_white_keys = ['name','age','job','subject','adress','wife']
walter_white_values = ['Walter White',50,'Teacher','Chemistry','Albuquerque','Skyler']
Breaking_Bad = dict(zip(walter_white_keys,walter_white_values))

查看一下全新的老白:

    print(Breaking_Bad){'name': 'Walter White','age': 50,'job': 'Teacher','subject': 'Chemistry','adress': 'Albuquerque','wife': 'Skyler'}

清空字典*

你也会时常想起国内抛下的孩子,感慨天道有轮回,善恶到头终有报,20年如白驹过隙, 稍纵即逝,此刻你已年近50,知天命的年龄被诊断出了癌症,正当你觉得人生无望的时候,一个曾经教过的小混混学生Jesse Pinkman出现在你的面前,从此江湖上开始了你的传说。。。

故事的最后,你看着腹部缓缓流出的鲜血,没有理会,依然专注地在制作眼前令无数人痴迷的蓝色结晶物,直到体力不支缓缓倒地,在生命的最后时刻,伴随着耳边的《Baby Blue》,眼前依稀看到了30年的那个意气风发的少年坐在街边咖啡馆,正专注地学习Python,直到一个女孩款款向他走来。。。。。。

至此,一代枭雄终落幕,最后让我们忍住眼泪,敲下最后的代码:

 Breaking_Bad.clear()del Breaking_Bad

我想可能有一句话能概括最后时刻老白的内心想法:我爱你不后悔,也尊重故事的结尾

如果你也是老白的粉丝,那就扩散吧,完结,撒花~

Python 基础起步 (七) 初识字典 Dictionary(绝命毒师前传)相关推荐

  1. Python基础(七)--模块和包

    目录 Python基础(七)--模块和包 1 模块 1.1 什么是模块 1.2 模块的使用 1.3 模块的搜索路径 1.4 模块的缓存 2 包 2.1 什么是包 2.2 包的使用 3 常用模块 3.1 ...

  2. Python基础(四)--字典与集合

    Python基础(四)--字典与集合 1 字典 1.1 什么是字典 字典提供的是一种映射存储的方式.字典分为两个部分,一个是键(key),一个是key所关联的值(value).,一个键关联(或绑定)一 ...

  3. Day2 - Python基础2 列表、字典、集合 --转自金角大王

    Day2 - Python基础2 列表.字典.集合 --转自金角大王 Posted on 2018-01-24 13:23 Byd_lei 阅读(41) 评论(0)  编辑 收藏 本节内容 列表.元组 ...

  4. 小白都能学会的Python基础 第七讲:综合实战3 - 文字识别、人脸识别实战

    1.华小智系列 - Python基础(案例版) <Python基础>目录 第七讲:综合实战3 - 文字识别.人脸识别实战 1.Python图片文字识别(OCR) 2.Python人脸识别( ...

  5. dictionary在python中什么意思_Python 字典(Dictionary)操作详解

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: dict = { ...

  6. Day2 - Python基础2 列表、字典、集合

    Python之路,Day2 - Python基础2 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过 ...

  7. C++中如何控制语句只执行一次_【Python基础(七)】逻辑控制

    本节将会讲到在编程中个人认为最重要的知识之一,逻辑控制.与其说是介绍语法,不如说是阐述看待事物的方法.我们身处的世界,每天有海量信息向我们袭来,每天我们要处理若干的事件,对于每一个事件,它都由若干个小 ...

  8. Python基础语法七:元组字典和集合

    1.元组 1.什么是元组 元组是不可变的列表(不支持增删改的操作),元组是有序的(支持下标操作) 元组是容器型数据类型,将()作为容器的标志,多个元素之间用逗号,隔开 元组中的元素的要求和列表一样 1 ...

  9. Python基础之(面向对象初识)

    一.初识面向对象 1.1.面向过程的程序的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复杂度 ...

最新文章

  1. sql server优化策略
  2. 如何对单手和双手协同运动方向进行神经表征和解码?北理工研究团队给出了相关方案
  3. php yii 模板引擎,模板引擎(Template Engines)
  4. MFC 不存在从 CString 到 char * 的适当转换函数
  5. html类型转换函数,如何在JavaScript中转换数据类型?
  6. 传递对象_洮北区司法局矫正对象献爱心传递社会正能量
  7. Linux-shell
  8. 中打开终端_macOS中轻松实现Finder当前目录中快速打开终端
  9. 只有一个显示器但是显示两个显示器_小米34寸曲面显示器深度体验 办公体验极佳 但是还有个大弱点...
  10. netty cpu 占用率 高_Netty 是如何支撑高性能网络通信的?
  11. 师弟新作 | NBT:王运浩、区健辉等综述纳米孔测序技术
  12. MySQL判断字符串是否是数字
  13. Oracle网格控制器OMA端安装Yast
  14. 【django】 model_to_dict ‘QuerySet‘ object has no attribute ‘_meta‘
  15. Bzoj1001 [BeiJing2006]狼抓兔子
  16. Heterogeneous Graph Attention Network翻译
  17. Anaconda 添加清华镜像源
  18. python#魔兽游戏#英雄联盟lol#地图
  19. 基于STM32的恒流源设计
  20. 我的世界java版做船_我的世界船怎么做 船的合成表

热门文章

  1. eclips开发工具的使用
  2. 小米路由器3c 虚拟服务器,小米路由器3C,怎么刷breed啊?可以吗
  3. 滚动 下拉简单实现分页
  4. Python实现批量查询手机号
  5. 【学透二叉树-二叉搜索树(二叉树)的最近公共祖先】
  6. 微信java tools_微信工具weixin-java-tools的使用总结
  7. D38 463. Island Perimeter
  8. GIS算法基础(五)矢量数据向栅格数据的转换(点,线算法实现)
  9. RE:从零开始的汇编语言_挑好书
  10. 树莓派强制更改root密码