zoukankan      html  css  js  c++  java
  • Python学习之路——字典

    Python学习之路——字典

    一、什么是字典

        在了解什么是字典之前我们先来看一个东西,假如现在有这样两个列表,一个列表是学生的姓名,另一个列表是学生的成绩,现在需要你去把学生的成绩和姓名匹配起来,该怎么做?
    
    l1 = ["小张","小李","小王"]
    l2 = ["60分","80分","70分"]
    
    #首先我们需要按照角标把学生的姓名拿到
    l1[0],l1[1],l1[2]
    #然后我们需要根据角标拿到学生的成绩
    l2[0],l2[1],l2[2]
    #最后将他们一一匹配
    
        或者还存在其他方法,比如,for循环,但是不管什么方法,这些信息都有一个共同点,就是他们是孤立的,需要比较麻烦的步骤才能匹配到一起。
    
        这时候,让我们看一下,我们用今天所要介绍的字典,可以怎样实现
    
    dic = {"小张":"60分","小李":"80分","小王":"70分"}
    
        怎么样?是不是像我们书上的目录一样,我们可以根据一个信息很快的找到另一个信息,这就是字典的基本形式
    
    dic = {"键":"值"}
    
        字典在Python中的关键字是dict,由一个键加冒号加一个值组成,对了,别忘了需要用大括号把它们包起来,字典的键就像我们读书时的书签,值就像页码,我们找到书签就可以很快的找到对应的页码,所以字典用起来要比列表要快,就像我们读书时,如果把读到的页码记在本子上,需要先找页码再去翻书,可是我们用书签的话,可以很快翻到我们要读的页码
    
        书签是为了记录我们书读到了哪里,是存储了信息,所以字典也同样具有存储信息的功能,一本书中可以放很多的书签,做很多的标记,同样一个字典当中,也可以放很多的信息,并且都做好了标记,所以,字典也将我们的信息做了关联
    
        我们放书签的时候是不是随心所欲的,没人规定先放哪后放哪,字典也是这样,是无序的,我们的书签是不是可以随意移动更改的?字典也一样,它是可变的
    
        现在让我们来总结一下什么是字典:
    
        - 字典,是一种数据类型,无序,可变
        - 字典可以储存大量信息,并且可以将数据做关联,用起来也比列表块
    

    二、字典的操作

        我们都知道,想通过书签做标记查询,都是需要通过书签来进行的,字典也是一样,不管我们做任何操作都是需要通过书签,也就是键来进行。
    
        刚才提到,字典就像书和书签,我们的书签可以随意的增加,拿走,替换,查找,字典也是可以做这些操作的,下面让我们一起来看一下
    

    1.字典的增:

    #先定义一个字典
    dic = {"key":"v"}
    dic["key2"] = "v2" 
    
        这是第一种方法,很简单很粗暴,就是我们把直接塞一个书签进去,就可以了,不过有同学要问了,如果原来的位置有书签了,也就是键是相同的怎么办,很简单,把原来的书签扔掉,换新的,新添加的键和值会覆盖掉原来的,所以字典的键也是唯一的,如果有重复,后面的会覆盖前面的,下面我们来看第二种方法
    
    #还是先定义一个字典
    dic = {"key":"v","key2":"v2"}
    dic.setdefult("键":"值")
    
    
        第二种方法实际上是两步,第一步是先查一下字典里有没有这个键值对,没有就加上,有就不动了,就像我们放书签前先看看原来的位置有没有一样
    

    2.然后是字典的删:

        首先我们来看一下第一种方法
    
    dic = {"key":"v","key2":"v2"}
    dic.pop("key")#通过键删除值,返回被删掉的值
    
        这种方法就像是把书签也就是字典的键直接拿走,但是书页和书签粘一起了,书页也一起被撕下来了
    

    下面是第二种方法

    del dic
    
        如果是这样写就像当时把书都扔了,什么都剩不下,所以我们需要标记上扔什么
    
    del dic["键"]
    
        通过键来锁定需要扔掉什么
        
        下面是第三种方法
    
    dic.clear()
    
        这种方法是吧书签连书页都扔了,但是封皮还在
    
        上面就是字典的删,下面是字典的改
    

    3.字典的改

        字典的改就是替换书签的过程,刚才我们提到了暴力添加在遇到相同的键的时候会把原来的覆盖掉所以修改的第一种方法就是,暴力修改
    
    dic["键"] = "值"
    
        第二种方法相对有点意思,它是这样的
    
    dic.update(dic1)#括号里放的一定是字典
    
        这种方法就像是买了一本新书,把新书和旧书合到了一起,但是人嘛,喜新厌旧,所以新的优先级就会相对高一些,新字典也就是括号里的字典中如果有和原字典相同的地方,会覆盖的原来的
    
        最后是字典的查询:
    

    4.字典的查

        刚才在讲改的时候我们提到一个东西,没错,就是setdefult,它有查询的步骤,所以,他也可以用来查字典
    
    print(dic.setdefult("键"))
    
        这边只是去看一眼字典里有没有这个书签,也就是有没有这个键,所以,我们只需要告诉他要查的键就可以了,查不到他也会告诉我们一声没有,也就是返回值是None
    
        第二种方法是get这就是获取
    
    print(dic.get("键","值(可不写)"))
    
        这种方法就是通过键去找到相应的值,同时会返回给我们一个信息,就是在值的位置指定一下,它找不到我们也没有指定的话会返回None
    
        最后一种方法就是我们自己去看
    
    print(dic["键"])
    
        通过这种方法找不到的时候,会报错,不仅告诉我们没有,还告诉我们本来就没放这个书签
    
        说完了字典的增删改查,我们再来看看其他的操作
    

    三、字典的其他操作

        刚才我们讲了,我要找某一个书签,某一页内容怎么办,如果我想知道所有的书签以及他们所代表的信息怎么办呢?下面我们来看一下。
    

    1.获取所有的键

        首先我们用获取把整本书的书签意义浏览一遍的方法来做
    
    print(dic.keys())
    """
    这时我们的得到的是一个高仿的列表,因为他是假货,只能用for循环去查,不支持索引,不支持增删改查
    可以用list(dic.keys())转为真列表
    """
    for i in dic.keys():
    	print(i)#这样我们可以的到所有的键
    
        下面我们来看一下所有的值是怎么获取的:
    
    print(dic.values())#同样是高仿列表
    for i in dic.values():
    	print(i)
    
        接下来是获得所有的键值对
    
    print(dic.items()) #还是高仿列表,并且列表里是由键值对组成的元组
    for i in dic.items():
        print(i[0],i[1]) #获得每一个元组,通过角标获得元祖中的元素
    
        上面的方法可以拿到键和值,但是还是比较麻烦,所以我们来看一种更方便的方法,解构
    

    四、解构

        先来看一下解构的基本形式
    
    a = 10
    b = 20
    #现在需要把a和b的值换一下,我们可以这样操作
    a,b = 20,10
    
    
        这就相当于我们凭空把两个杯子里的水换了一下,怎么样是不是很神奇,解构也可用来获取列表,字符串或字典中的信息
    
    a,b = [1,2]
    print[a]
    print[b]
    
    a,b = "wc"
    print(a)
    print(b)
    
    a,b = {"key1":1,"key2":2}
    print(a)#"key1"
    print(b)#"key2"
    
        上面是两个的,我们看一下更多的
    
    l1 = [1,2,3,4,5,6,7]
    a,b,c,d,e,f,g = l1
    print(a,b,c,d,e,f,g)
    
        如果我只想要第一个和第二个值怎么办,这时候我们需要一个神器"*"
    
    l1 = [1,2,3,4,5,6,7]
    a,b,*_= l1
    print(a,b)
    *就像磁石,可以将多个信息收录到一起,学名叫聚合
    
        好了,下面我们来看一下如何用解构来获得字典的键和值:
    
    for a,b in dic.items():
        print(a,b)
    
        最后我们来看一个有意思的东西,字典的嵌套
    

    五、字典的嵌套

    dic = {1001:["周杰伦","林俊杰"],
           1002:{"汪峰":{"前妻1":["大烧饼"],"前妻2":["熊大","熊二"],"国际章":"肉丝"}},
           1003:{"陈冠希":["阿娇","阿萨","张柏芝"]},
           1004:{"韦小宝":[{"教主夫人":["教主"]},
                        {"阿珂":"刺客"},
                        {"双儿":"天地会"},
                        {"爱心觉罗建宁":"公主"},
                        {"独臂神尼":{"韦小宝师父":{"兰陵王":"隐身"},"花木兰":[
                               "唧唧复唧唧","木兰是战士",{"爸爸":["花和尚"]}]
                                 }},
                        {"陈圆圆":"丈母娘"},{"穆建平":"小郡主"}]},
           1005:{"常鑫":["大黑哥","大烧饼","吃大煎饼","肉夹馍","自行车","井盖",]}
           }
    
    # print(dic)
    # print(dic[1004]["韦小宝"][0]["教主夫人"][0])
    # print(dic[1005]["常鑫"][-1])
    # print(dic[1002]["汪峰"]["前妻2"][-1])
    # print(dic[1004]["韦小宝"][4]["独臂神尼"]["韦小宝师父"]["兰陵王"])
    # print(dic[1004]["韦小宝"][4]["独臂神尼"]["花木兰"][2]["爸爸"][0])
    
        怎么样,是不是看着有点蒙圈,其实只要我们细细的缕一下就会发现,字典的嵌套就像图书馆一样,那么多书,想找某一本书太困难,我们就需要根据编码来,先找到大类的编码,再找到子类的编码,再找到某一本书,如果还需要其中的内容,可以根据页码,行数,字数进行寻找
  • 相关阅读:
    【JAVAWEB学习笔记】网上商城实战3:购物模块和订单模块
    JAVAEE学习——hibernate01:简介、搭建、配置文件详解、API详解和CRM练习:保存客户
    【JAVAWEB学习笔记】网上商城实战2:异步加载分类、Redis缓存分类和显示商品
    征稿延期 | 2019亚洲语言处理国际大会(IALP2019)征稿延期
    征稿通知 | 2019亚洲语言处理国际大会(IALP2019)开始征稿
    ECNU·AntNLP主页船新上线!
    [NAACL19]无监督循环神经网络文法 (URNNG)
    [ICLR18]联合句法和词汇学习的神经语言模型
    [NAACL19]一个更好更快更强的序列标注成分句法分析器
    [EMNLP18]用序列标注来进行成分句法分析
  • 原文地址:https://www.cnblogs.com/Kiwi-456/p/11317878.html
Copyright © 2011-2022 走看看