Road Python learning - dictionary

Road Python learning - dictionary

First, what is the dictionary

    在了解什么是字典之前我们先来看一个东西,假如现在有这样两个列表,一个列表是学生的姓名,另一个列表是学生的成绩,现在需要你去把学生的成绩和姓名匹配起来,该怎么做?
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,由一个键加冒号加一个值组成,对了,别忘了需要用大括号把它们包起来,字典的键就像我们读书时的书签,值就像页码,我们找到书签就可以很快的找到对应的页码,所以字典用起来要比列表要快,就像我们读书时,如果把读到的页码记在本子上,需要先找页码再去翻书,可是我们用书签的话,可以很快翻到我们要读的页码

    书签是为了记录我们书读到了哪里,是存储了信息,所以字典也同样具有存储信息的功能,一本书中可以放很多的书签,做很多的标记,同样一个字典当中,也可以放很多的信息,并且都做好了标记,所以,字典也将我们的信息做了关联

    我们放书签的时候是不是随心所欲的,没人规定先放哪后放哪,字典也是这样,是无序的,我们的书签是不是可以随意移动更改的?字典也一样,它是可变的

    现在让我们来总结一下什么是字典:

    - 字典,是一种数据类型,无序,可变
    - 字典可以储存大量信息,并且可以将数据做关联,用起来也比列表块

Second, the operation of the dictionary

    我们都知道,想通过书签做标记查询,都是需要通过书签来进行的,字典也是一样,不管我们做任何操作都是需要通过书签,也就是键来进行。

    刚才提到,字典就像书和书签,我们的书签可以随意的增加,拿走,替换,查找,字典也是可以做这些操作的,下面让我们一起来看一下

1. The increase in the dictionary:

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

2. The dictionary is then deleted:

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

The following is a second method

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

    上面就是字典的删,下面是字典的改

3. Dictionary of change

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

    最后是字典的查询:

4. check dictionary

    刚才在讲改的时候我们提到一个东西,没错,就是setdefult,它有查询的步骤,所以,他也可以用来查字典
print(dic.setdefult("键"))
    这边只是去看一眼字典里有没有这个书签,也就是有没有这个键,所以,我们只需要告诉他要查的键就可以了,查不到他也会告诉我们一声没有,也就是返回值是None

    第二种方法是get这就是获取
print(dic.get("键","值(可不写)"))
    这种方法就是通过键去找到相应的值,同时会返回给我们一个信息,就是在值的位置指定一下,它找不到我们也没有指定的话会返回None

    最后一种方法就是我们自己去看
print(dic["键"])
    通过这种方法找不到的时候,会报错,不仅告诉我们没有,还告诉我们本来就没放这个书签

    说完了字典的增删改查,我们再来看看其他的操作

Third, the dictionary's other operations

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

1. Obtain all keys

    首先我们用获取把整本书的书签意义浏览一遍的方法来做
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]) #获得每一个元组,通过角标获得元祖中的元素
    上面的方法可以拿到键和值,但是还是比较麻烦,所以我们来看一种更方便的方法,解构

Fourth, deconstruction

    先来看一下解构的基本形式
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)
    最后我们来看一个有意思的东西,字典的嵌套

V. dictionary nesting

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])
    怎么样,是不是看着有点蒙圈,其实只要我们细细的缕一下就会发现,字典的嵌套就像图书馆一样,那么多书,想找某一本书太困难,我们就需要根据编码来,先找到大类的编码,再找到子类的编码,再找到某一本书,如果还需要其中的内容,可以根据页码,行数,字数进行寻找

Guess you like

Origin www.cnblogs.com/Kiwi-456/p/11317878.html