美文网首页Python小哥哥
Python内置结构 - 字典

Python内置结构 - 字典

作者: 我爱学python | 来源:发表于2019-05-04 15:49 被阅读14次

1 字典介绍

 在Python中字典属于一种映射类型,它和set相同,同样属于非线性结构存储,Python官方对dict有如下解释

一个映射对象映射一个可hash的值到任意一个对象上去。

映射是可变的对象。

dict是当前唯一一个标准的映射类型。

字典的键几乎可以任意的值。

字典的值可以不必可hash,也就是说值可以是列表,字典,或者其他任意可变的对象

如果key相同,那么后面的value将会覆盖先前的value

不建议使用float类型作为字典的key

简单来说:字典是由key:value键值对组成的数据的集合,它的主要特点是 可变的无序的不重复的

字典的key必须是可hash对象。

2 字典的基本操作

字典是除set集合以外另一种可变的非线性容器模型,在Python中非常强大,适合各种结构数据的存储、嵌套等。

2.1 字典的定义

字典的每个key到value的键值对用冒号(:)分割,每对之间用逗号(,)分割,整个字典包括在花括号({})中。例:{'a':1, 'b':2},Python提供了多种创建字典的方式,如下:

基本格式:d = dict() 或者 d = {}

dict(**kwargs): 使用name=value对,来初始化一个字典

dict(iterable, **kwargs):使用可迭代对象和name=value构造字典,注意可迭代对象必须是一个二元结构

dict(mapping, **kwargs): 使用一个字典构造另一个字典

dic = {'a':1, 'b':2, 'c':3, 'd':[1,2,3]}

dic = dict.fromkeys(iterable, value): 使用可迭代对象的值作为key生成字典,value默认为0,否则用指定的value对字典进行初始化。

2.2 字典元素的访问

有如下三种方式访问字典的键值对:

d[key]: 返回key对应的value,key不存在抛出KeyError异常

dict.get(key[, default]): 返回key对应的value,key不存在返回缺省值,如果没有设置缺省值赶回None

dict.setdefault(key[, default]): 返回key对应的值value,key不存在,添加key:value键值对(value设置为default),并返回value,如果default没有设置缺省为None

当然字典也可以被迭代访问,后面介绍

2.3 字典的增删改

由于字典可变、非线性、无序的特性,而且字典的key必须是可hash的对象,查找某个key也是直接hash(),然后找到对应的房间的,所以我们对它某个key的修改可以理解为是O(1)的操作,效率很高,主要有以下几种方法。

d[key] = value: 将key对应的值修改为value,key不存在添加新的key:value对。

dic.update([other]) --> None: 使用另一个字典的k,v对更新本字典,key不存在时添加,存在时则覆盖,所以不会返回新的字典,属于原地修改。

dic.pop(key[, default]): key存在,移除它,并返回它的value,key不存在返回指定的default,如果default未指定,那么会返回KeyError异常。

dic.popitem(): 移除并返回一个任意的键值对,字典为empty时,抛出KeyError异常。

dic.clear(): 清空字典。

del dic['a']: 通用的删除变量方法。

当我们以字典的某个对象比如keys,values,items等为条件对字典进行遍历时,我们不能在遍历的同时删除字典的元素,字典在运行时不允许长度改变,但是在list中这种操作是可以的,但是会得到意想不到的结果,建议对容器进行遍历的同时不要修改它的长度。

3 字典遍历

在Python中,我们所说的基本数据结构:字符串、元组、列表,集合,包括字典,都可以认为是一个容器箱子,只要是容器,我们就可以进行遍历(是否有序和是否可以遍历没有必然关系,只不过有序的话是顺序拿出,而无序则是随机拿出),我们可以使用多种方式对字典进行迭代遍历,但是有些地方和其他类型不同。

3.1 遍历字典的key

dic.keys(): --> dict_keys --> 返回字典dic的所有key组成的一个dict_keys视图集合(类set结构,不会生成新的内存空间)。

迭代字典就是在迭代字典的key,所以直接迭代字典和使用字典的keys()方法返回一个keys的视图然后再迭代,是一样的效果。

3.2 遍历字典的value

dic.values(): --> dict_values --> 返回字典dic的所有values组成的一个dict_values视图集合(类set结构,不会生成新的内存空间)。

可以首先遍历字典的key,然后再通过key来访问对应的value,也可以通过values()直接访问values。

3.3 变量字典的键值对

dic.items(): --> dict_items --> 返回字典dic的所有的key和value(每个key和value的键值对由元组表示)组成的一个dict_items视图集合(类set结构,不会生成新的内存空间)。

由于返回的每个键值对为元组格式,那么利用我们前面学的封装与结构,可以很方便的获取key和它对应的value

3.4 字典遍历小结

 在Python3中,keys、values、items方法返回一个类似一个生成器的可迭代对象,不会把函数的返回结果复制到内存空间中。

Dictionary view对象,可以使用len()、iter()、in

操作

字典的entry的动态视图,字典变化,视图将反映出这些变化

keys返回一个类似set的对象,也可以看作是一个set集合,如果values可hash的话,那么items也可以看作是类set对象

Python 2中,keys、values、items方法会返回一个新的列表,占据新的内存空间,所以Python 2建议使用iterkeys、itervalues、iteritems,返回一个迭代器,而不是返回一个copy

4 defaultdict默认值字典

defaultdit object是dict的子类,我们称它为默认值字典,即在创建字典时给所有的value指定一个默认值,它存放在collections模块中,使用前需要先进行导入。为什么有默认值字典这种类型呢?那么请看如下代码:

我们在计算一个字符串或者一个列表中的元素重复的次数时,通常会用到字典对齐进行计数,如果元素不存在字典中,那么就需要初始化元素,当我们使用默认值字典时,就可以优化的更简洁。

5 OrdereDict有序字典

Ordered dictionaries像一个有序字典,但是它记住的是插入元素的顺序。当我们迭代有序字典时,它会按照这些键值对插入的顺序返回。它同样存在于collections模块中,需要使用是请首先导入。

注意:在3.6的版本的python在python/ipython解释器中,直接迭代或者打印时,是有序的(OrderedDict),但是在3.5版本以前都是随机的,千万不要以为字典是有序的!

相关文章

  • python基础5-字典

    什么是字典字典(Dictionary)是Python中的内置数据结构字典非常适合表达结构化数据 字典的特点采用键(...

  • 6字典[python基础]

    什么是字典字典(Dictionary)是Python中的内置数据结构字典非常适合表达结构化数据 字典的特点采用键(...

  • Python内置结构 - 字典

    1 字典介绍 在Python中字典属于一种映射类型,它和set相同,同样属于非线性结构存储,Python官方对di...

  • 字典

    字典的操作方法 字典是python中唯一的映射类型,字典也是python中出列表外,最灵活的内置数据结构类型.列表...

  • Python 数据结构

    Python 有四种内置的数据结构 - 列表(List),元组(Tuple),字典(Dictionary),集合(...

  • Python四个内置数据结构

    认识4个内置数据结构 Python提供了4个内置数据结构,可以用来保存任何对象集合,它们分别是列表、元组、字典、集...

  • Python拉链法和开地址法实现字典

    Python字典(dictionary)是除列表之外python中最灵活的内置数据结构类型。列表是有序的对象结合,...

  • python 数据结构

    python包含数据结构包含list列表、tuple元组、dict字典、set集合这些都是内置类型。collect...

  • Python编程中3个常用的数据结构和算法

    Python内置了许多非常有用的数据结构,比如列表(list)、集合(set)以及字典(dictionary)。就...

  • 数据结构/字典

    1.dictionary字典,是除列表外python最灵活的内置数据结构类型,列表是有序的对象集合,字典是无序的对...

网友评论

    本文标题:Python内置结构 - 字典

    本文链接:https://www.haomeiwen.com/subject/fanxoqtx.html