美文网首页
《python基础教程(第三版)》第四章 当索引行不通时

《python基础教程(第三版)》第四章 当索引行不通时

作者: Colleen_oh | 来源:发表于2019-07-25 18:02 被阅读0次

字典(日常生活中的字典和Python字典)旨在让你能够轻松地找到特定的单词(键),以获悉其定义(值)。

4.1 创建和使用字典

字典以类似于下面的方式表示:

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

字典由键及其相应的值组成,这种键值对称为项(item)。在前面的示例中,键为名字,而值为电话号码。每个键与其值之间都用冒号(:)分隔,项之间用逗号分隔,而整个字典放在花括号内。空字典(没有任何项)用两个花括号表示,类似于下面这样:{}

在字典(以及其他映射类型)中,键必须是独一无二的,而字典中的值无需如此。

4.1.1 函数dict

可使用函数dict从其他映射(如其他字典)或键值对序列创建字典。

>>> items = [('name', 'Gumby'), ('age', 42)]
>>> d = dict(items)
>>> d
{'name': 'Gumby', 'age': 42}
>>> d['name']
'Gumby'

还可使用关键字实参来调用这个函数,如下所示:

>>> d = dict(name='Gumby', age=42)
>>> d
{'name': 'Gumby', 'age': 42}

4.1.2 基本的字典操作

字典的基本行为在很多方面都类似于序列。
len(d)返回字典d包含的项(键值对)数。
 d[k]返回与键k相关联的值。
 d[k] = v将值v关联到键k。
 del d[k]删除键为k的项。
 k in d检查字典d是否包含键为k的项。

虽然字典和列表有多个相同之处,但也有一些重要的不同之处。

键的类型:字典中的键可以是整数,但并非必须是整数。字典中的键可以是任何不可变的类型,如浮点数(实数)、字符串或元组。
自动添加:即便是字典中原本没有的键,也可以给它赋值,这将在字典中创建一个新项。然而,如果不使用append或其他类似的方法,就不能给列表中没有的元素赋值。
成员资格:表达式k in d(其中d是一个字典)查找的是键而不是值,而表达式v in l(其中l是一个列表)查找的是值而不是索引。这看似不太一致,但你习惯后就会觉得相当自
然。毕竟如果字典包含指定的键,检查相应的值就很容易。

4.1.3 字典方法

1、clear
方法clear删除所有的字典项,这种操作是就地执行的(就像list.sort一样),因此什么都不返回(或者说返回None)。

>>> d = dict(name='Gumby', age=42)
>>> d
{'name': 'Gumby', 'age': 42}
>>> d
{}

2、copy
方法copy返回一个新字典,其包含的键值对与原来的字典相同(这个方法执行的是浅复制,因为值本身是原件,而非副本)。就是说如果修改副本中的值(就地修改而不是替换),原件也将发生变化。看看下面的例子

>>> x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
>>> y = x.copy()
>>> y['username'] = 'mlh'
>>> y['machines'].remove('bar')
>>> y
{'username': 'mlh', 'machines': ['foo', 'baz']}
>>> x
{'username': 'admin', 'machines': ['foo', 'baz']}

为避免这种问题,一种办法是执行深复制,即同时复制值及其包含的所有值,等等。为此,可使用模块copy中的函数deepcopy。

>>> from copy import deepcopy
>>> d = {}
>>> d['names'] = ['Alfred', 'Bertrand']
>>> c = d.copy()
>>> dc = deepcopy(d)
>>> d['names'].append('Clive')
>>> c
{'names': ['Alfred', 'Bertrand', 'Clive']}
>>> dc
{'names': ['Alfred', 'Bertrand']} 

3、fromkeys
方法fromkeys创建一个新字典,其中包含指定的键,且每个键对应的值都是None。

>>> {}.fromkeys(['name', 'age'])
{'age': None, 'name': None} 

如果你不想使用默认值None,可提供特定的值。

>>> dict.fromkeys(['name', 'age'], '(unknown)')
{'age': '(unknown)', 'name': '(unknown)'}

4、get
方法get为访问字典项提供了宽松的环境。通常,如果你试图访问字典中没有的项,将引发错误。

>>> d = {}
>>> print(d['name'])
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
KeyError: 'name'

而使用get不会这样:

>>> print(d.get('name'))
None

如你所见,使用get来访问不存在的键时,没有引发异常,而是返回None。你可指定“默认”值,这样将返回你指定的值而不是None。

>>> d.get('name', 'N/A')
'N/A' 

如果字典包含指定的键,get的作用将与普通字典查找相同。

>>> d['name'] = 'Eric'
>>> d.get('name')
'Eric' 

5、items
方法items返回一个包含所有字典项的列表,其中每个元素都为(key, value)的形式。字典项在列表中的排列顺序不确定。

>>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
>>> d.items()
dict_items([('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')])
>>> list(d.items())#可返回列表
[('spam', 0), ('title', 'Python Web Site'), ('url', 'http://www.python.org')] 

6、pop
方法pop可用于获取与指定键相关联的值,并将该键值对从字典中删除。

>>> d = {'x': 1, 'y': 2}
>>> d.pop('x')
1
>>> d
{'y': 2}

7、update
方法update使用一个字典中的项来更新另一个字典。

>>> d = {
... 'title': 'Python Web Site',
... 'url': 'http://www.python.org',
... 'changed': 'Mar 14 22:09:15 MET 2016'
... } 
>>> x = {'title': 'Python Language Website'}
>>> d.update(x)
>>> d
{'url': 'http://www.python.org', 'changed':
'Mar 14 22:09:15 MET 2016', 'title': 'Python Language Website'} 

8、values
方法values返回一个由字典中的值组成的字典视图。不同于方法keys,方法values返回的视图可能包含重复的值。

>>> d = {}
>>> d[1] = 1
>>> d[2] = 2
>>> d[3] = 3
>>> d[4] = 1
>>> d.values()
dict_values([1, 2, 3, 1]) 

相关文章

  • 《python基础教程(第三版)》第四章 当索引行不通时

    字典(日常生活中的字典和Python字典)旨在让你能够轻松地找到特定的单词(键),以获悉其定义(值)。 4.1 创...

  • 第4章 当索引行不通时

    通过名称来访问其各个值的数据结构。这种数据结构称为映射(mapping)。字典是Python中唯一的内置映射类型,...

  • 第4章 当索引行不通时

    代码清单4-1 字典示例 运行结果如下: 代码清单4-2 字典方法示例 运行结果如下:

  • Python数据分析学习

    当数据索引不是整数时: 利用标签切片运算与普通的Python切片运算不同,末端是包含的 当数据索引不是整数时:

  • Python教程列表

    Python 基础教程 Python 基础教程Python 简介Python 环境搭建Python 中文编码Pyt...

  • 多线程编程---python

    参考 《Python 核心编程》(第三版) 一、Thread模板 缺点: 不支持守护线程:当主线程退出时,所有子...

  • Python基础教程

    Python基础教程1 Hello Python基础教程1 Hello python 3.7极速入门教程1安装:L...

  • list和tuple

    list 当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个...

  • 推荐几本非常全的Python入门基础学习好书

    一、Python基础教程 《图灵程序设计丛书:Python基础教程(第2版 修订版)》包括Python程序设计的方...

  • Python 教程(一)

    www.runoob.com/python/python-tutorial.html Python基础教程 1、#...

网友评论

      本文标题:《python基础教程(第三版)》第四章 当索引行不通时

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