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

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

字典究竟是什么

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

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

键必须是惟一的,但值则没必要。值能够取任何数据类型,我会在接下来用详细的例子详细解释。
若是咱们要把字典和列表作一个对比总结的话,能够发现以下特色:数据结构

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

好啦,让咱们如今开始今天的栗子吧~学习

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

建立一个字典

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

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

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

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

彻底不懂在说啥呀...可是若是用字典会舒服的多:blog

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: bai
     Salary 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 : bai
    family_name : xiao
    age : 23
    city : Beijing
    university_rank : 985
    university_name : beida
    job : Developer
    salary : 10000
    company : Start Up
    married : True
    wife_measurements : [82, 62, 82]
    number_of_children : 1
    future : 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关键字:

clipboard.png

这里删除的东西有点多,我利用了上篇笔记讲过的知识,首先创建了一个列表,装入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

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

clipboard.png

若是你们对Dict的其余常见使用方法感兴趣,能够关注个人微信公众号Python极简教程,我会把最高效,简洁的小技巧一一记录下来,分享给你们:

图片描述

相关文章
相关标签/搜索