python 2.7 dict

dict :

              python 内置了字典:dict 的支持,dict 全称 dictionary,在其他语言中也成为map,使用键-值(key-value)存储,具有极快的查找速度。

               举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:

                names = ['machael', 'bpb', 'tracy']

                scores = [95,75,85]

                给定一个名字,要查找对应的成绩,就先要在names中找对应的位置,再从scores取出对应的成绩,list越长耗时越长。

                如果用dict实现,只需要一个名字-成绩的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢,用python写一个dict 如下:

                

                为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的,假设字典包含diy了一万字,我们要查一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种发放就是在list中查找元素的方法,list越大,chaz查找越慢。

                 第二种方法是现在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字,无论找哪个字,这种方法速度都非常快,不会随着字典的大小增加而变慢。

                dict 就是第二种实现方式,给定一个名字,比如'michael',dict 在内部就可以直接计算出Michael对应的存放成绩的页码,也就是95这个数字存放的内存地址,直接取出来,所以速度非常快。 你可以猜到这种key_value存储方式,在放进去的时候必须根据key算出value的存放位置,这样,取得时候才能根据key直接拿到value。

                  把数据放入dict 的方法,除了初始化指定外,还可以通过key放入:

                  

                  由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值顶掉。

                  

                  如果key不存在,dit 就会报错:

                  

                  要避免 key 不存在的错误,有两种办法:一种是 in  判断 key 是否存在:

                   

                  二是通过dict提供的get方法,如果key不存在,可以返回none,或者自己指定的value:

                  

                  注意:返回none的时候python的交互命令不显示结果。

           要删除一个key,用  pop(key)  方法,对应的 value 也会从 dict 中删除。

                  

                 务必注意:dict 内部存放的顺序和key放入的顺序是没有关系的。

  和 list 比较,dict 有以下几个特点:

           查找和插入的速度极快,不会随着key的增加而增加。

           需要占用大量内存,内存浪费。

  而 list 相反:

           查找和插入的时间随着元素的增加而增加。

           占用空间小,浪费内存很少。

 所以:dict 是用空间来换取时间的一种方法。

            dict 可以用在需要高速查找的很多地方,在python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是:dict 的key必须是不可变对象。

             这是因为dict根据key来计算value的存储位置,如果每次计算相同key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法。

             要保证hash的正确性,作为key的对象就不能变,在python中,字符串、整数等都是不可变的。因此,可以放心的作为key。而list是可变的,就不能作为key:

              

猜你喜欢

转载自blog.csdn.net/HelloWord176/article/details/82955685
今日推荐