简明了解python基本数据类型-字典

    “字典”是Python语言中最重要的三种数据类型(字符串、列表、字典)之一,它的用处很多,本身的功能也很强大。实际上,三种最基本的数据类型用途都很广泛,功能都很强大。但Python字典不同于其它两种类型的是,它通过名称而不是索引来访问其中的各个值。其是一种可以称为“映射”的数据结构,也是Python中唯一的内置映射类型。

    “字典”的名称即指出了这种数据结构的用途。普通图书适合按照从头到尾的顺序阅读,当然,如果我们愿意,也可快速翻到想要的某一页,这有点像Python中的列表。日常生活中的字典通常作为工具书来用,能够让我们轻松地找到特定的单词,以获悉单词的定义。Python字典能够帮助我们快速地找到想要的“键”,从而获得其相应的“值”。


    Python字典的“键”和“值”都可能包含有用的信息。它们都可以用来做文章。要定义一个字典,通常有两种方式。

    第一种是直接定义:

通过d = {key1: 值1, key2: 值2, ...}

比如:phonebook = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

    字典的基本元素称为键值对(key-value对),也可以称为“项”(item)。每个项(键值对)使用冒号(:)分割键和值,每项之间使用逗号(,)分割,整个字典包括在花括号({})中。其中的键(key)和值(value)一一映射,一一对应。

    第二种是通过dict()函数来定义:

    函数dict()能够接收具备映射性质的实参来创建字典

    a.接收关键字实参

    比如:d = dict(name='David', age=25)

>>> d = {'name': 'David', 'age': 25}

    b.接收类似[(a1, b1), (a2, b2), ...]的实参

例:d = dict([('name', 'David'), ('age', 25)])将创建与上个例子相同的字典

>>> d = {'name': 'David', 'age': 25}

    像函数list、tuple和str一样,如果调用dict()函数时没有提供任何实参,将返回一个空字典。即dict()={}。

    需要注意的是,虽然字典基本能够容纳任何类型的数据,但只是针对它的“值”而言的。字典的“键”必须是不可变类型的数据,比如:字符串,元组,数,而不能是:列表,字典或其他可变类型的数据。

    还有一点,因为字典是通过“键”访问其中的“值”,所以键必须是唯一的。否则,计算机会觉得混乱,不知道我们想要哪个值。并且字典中的项是无序的,因为已经有“键”了,我们无需再通过顺序来标识其中的项。不必像列表、元组和字符串一样使用索引为它们所包含的元素排序。


    字典的很多基本操作类似于其他序列,大致包含如下:

    1)len(d)返回字典d包含的项(键-值对)数

    2)d[k]返回与键k相关联的值

    3)d[k] = v将值v关联到键k

    4)del d[k]删除键为k的项

    5)k in d检查字典d是否包含键为k的项

    方法2)中是根据字典中已经存在的键获取其关联的值;方法3)是将新值v赋值给字典中不存在的键或者是已经存在的键,如果键存在新值v覆盖原有的值,如果键不存在就创建一个新的键-值对。


    Python字典内置有很多方法,可以使用它们来操作字典,获得我们想要的结果。

    1)clear

作用:删除字典中的所有项

返回值:该方法没有返回值,或者说返回None

用法:d.clear()

例:

>>> d = {'name': 'David', 'age': 25}

>>> return_value = d.clear()

>>> d

{}

>>> return_value

None

    2)get

作用:get方法也能够根据键获得值,但比d[key]的方式取值更好用,后一种方法只适用于键存在时(否则会抛出异常),而get方法不会如此(键不存在时返回None)

用法:value = d.get(key)

例:

>>> d = {'name': 'David', 'age': 25}

>>> d.get('name')

'David'

>>> d.get('phone')

None

#【也可以设置键不存在时的返回值(如果不设置,即默认为None)】

>>> d.get('phone',119)

119

PS:在编写取字典值的代码时,使用此方法,我们将会体验到它的好用。

    3)items

作用:返回一个包含所有字典项的列表,其中每个元素都为(key, value)的形式。

返回值:items方法返回的是一个“字典视图”,dict_items(), 里面包含的即是返

      回一个包含所有字典项的列表。

用法:t = d.items()

例:

>>> d = {'name': 'David', 'age': 25}

>>> t = d.items()

>>> t

dict_items([('name', 'David'), ('age', 25)])

PS:dict_items()是一种名为字典视图的特殊类型,可用于迭代,可用于成员资格

检查,可使用len(t)。但是不能当做正常的字典来用,比如:不能t['name'],不能

t[0]。并且它始终是底层字典的反映,t会跟随字典d的变化而变化。

    4)keys

作用:返回一个包含所有字典key的列表,也属于“字典视图”,为dict_keys()。

例:

>>> d = {'name': 'David', 'age': 25}

>>> t = d.keys()

>>> t

dict_keys(['name', 'age'])

PS:其他跟items方法类似。

    5)values

作用:返回一个包含所有字典value的列表,也属于“字典视图”,为dict_values()。

例:

>>> d = {'name': 'David', 'age': 25}

>>> t = d.values()

>>> t

dict_values(['David', 25])

PS:其他跟items方法类似。

    6)pop

作用:用于获取与指定键相关联的值,并将该键-值对从字典中删除。需要注意的是,当指定的键不存在时,会抛异常。

用法:value = d.pop(key)

例:

>>> d = {'name': 'David', 'age': 25}

>>> val = d.pop('age')

>>> val

25

>>> d

{'name': 'David'}

    7)popitem

作用:类似于list.pop,但list.pop弹出列表中的最后一个元素,而popitem弹出出一个字典项。但由于字典是无序的。最好使用OrderedDict来使用此方法。

返回值:弹出的字典项的元组形式。

用法:tur = d.popitem()

例:

>>> d = {'name': 'David', 'age': 25}

>>> d.popitem()

('age', 25)

>>> d

{'name': 'David'}

PS:OrderedDict是属于“有序字典”类型,

    形式为OrderedDict([('name', 'David'), ('age', 25)]),基本可以像操

    作普通字典一样操作它,但它其中的元素是有序的。

    8)setdefault

作用:方法setdefault有点像get,因为它也获取与指定键相关联的值,但除此之外,setdefault 还在字典不包含指定的键时,在字典中添加指定的键-值对。

用法:value = d.setdefault(key)

例:

>>> d = {'name': 'David', 'age': 25}

>>> val = d.setdefault('phone', 119)

>>> val

119

>>> d

{'name': 'David', 'age': 25, 'phone': 119}

>>> d = {'name': 'David', 'age': 25}

>>> val = d.setdefault('age', 18)

>>> val

25

>>> d

{'name': 'David', 'age': 25}

    9)update

作用:使用一个字典中的项来更新另一个字典。原字典中已经存在该项时,就替换;不存在就创建。

用法:d.update(d1)

例:

>>> d = {'name': 'David', 'age': 25}

>>> d.update({'phone': 119})

>>> d

{'name': 'David', 'age': 25, 'phone': 119}

>>> d.update({'name': 'Alice'})

>>> d

{'name': 'Alice', 'age': 25, 'phone': 119}

>>> d.update(age=18)

>>> d

{'name': 'Alice', 'age': 18, 'phone': 119}

    Python字典的方法不止这些,上述所列只是比较常用的。


关于字典无序的补充说明:

    Python字典中的项无序在python2.x版本中能够容易的体现到。在python3.x中,Python字典会按照其中项的创建顺序为它们排位,即它们有初始顺序。但我们无法对这初始排序做些什么。下面的实例能够体现Python字典的无序性:

>>> d1 = {'name': 'David', 'age': 25}

>>> d2 = {'age': 25, 'name': 'David'}

>>> d1 == d2

True

    而对于OrderedDict有序字典,上述测验的结果为“False”

>>> from collections import OrderedDict

>>> d1 = OrderedDict([('name', 'David'), ('age', 25)])

>>> d1

OrderedDict([('name', 'David'), ('age', 25)])

>>> d2 = OrderedDict([('age', 25), ('name', 'David')])

>>> d1 == d2

False


参考书籍:

《Python基础教程(第三版)》 ---作者:Magnus Lie Hetland 著,袁国忠 译

链接:百度云盘

提取码:7r7o

你可能感兴趣的:(简明了解python基本数据类型-字典)