文档章节

Python核心编程 第七章课后习题

toddler
 toddler
发布于 2015/01/17 23:53
字数 1482
阅读 226
收藏 6

核心笔记:什么是哈希表?它们与字典的关系是什么?

       序列类型用有序的数字键做索引将数据以数组的形式存储。一般,索引值与所存储的数据毫无

关系。还可以用另一种方式来存储数据:基于某种相关值,比如说一个字符串。我们在日常生活中

一直这么做。你把人们的电话号码按照他们的姓记录在电话簿上,你按照时间在日历或约会簿上添

加事件,等等。在这些例子中,你的键(key)就是和数据项相关的值。

         哈希表是一种数据结构:它按照我们所要求的去工作。哈希表中存储的每一条数据,叫做一个

值(value),是根据与它相关的一个被称作为键(key)的数据项进行存储的。键和值合在一起被称为

“键-值 对”(key-value pairs)。 哈希表的算法是获取键,对键执行一个叫做哈希函数的操作,

并根据计算的结果,选择在数据结构的某个地址中来存储你的值。任何一个值存储的地址皆取决于

它的键。正因为这种随意性,哈希表中的值是没有顺序的。你拥有的是一个无序的数据集。

        你所能获得的有序集合只能是字典中的键的集合或者值的集合。方法 Keys() 或 values() 返回

一个列表,该列表是可排序的。 你还可以用 items()方法得到包含键、值对的元组的列表来排序。

由于字典本身是哈希的,所以是无序的。

        哈希表一般有很好的性能, 因为用键查询相当快。


7-1

"""字典方法。哪个字典方法可以用来把两个字典合并到一起?"""

"""
Answer:  
(1)
items(...)
 |      D.items() -> list of D's (key, value) pairs, as 2-tuples

(2)
update(...)
 |      D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
 |      If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
 |      If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
 |      In either case, this is followed by: for k in F: D[k] = F[k]
"""


(1)
>>> new = dict([ ("qwer"[i-1], i) for i in range(1, 5) ])
>>> new
{'q': 1, 'r': 4, 'e': 3, 'w': 2}
>>> old = dict([ ("asdf"[i-1], i) for i in range(1, 5) ])
>>> old 
{'a': 1, 's': 2, 'd': 3, 'f': 4}
>>> res_add = dict( new.items() + old.items() )
>>> res_add
{'a': 1, 'e': 3, 'd': 3, 'f': 4, 'q': 1, 's': 2, 'r': 4, 'w': 2}

(2)
>>> new.update(old)
>>> new
{'a': 1, 'e': 3, 'd': 3, 'f': 4, 'q': 1, 's': 2, 'r': 4, 'w': 2}

7-2.

字典的键。我们知道字典的值可以是任意的 Python 对象,那字典的键又如何呢?请试

着将除数字和字符串以外的其他不同类型的对象作为字典的键,看一看,哪些类型可以,哪些不行?

对那些不能作字典的键的对象类型,你认为是什么原因呢?

Answer:

Python 的字典是作为可变的哈希表实现的,在执行中字典中的键不允许被改变。

比如:当创建了一个字典,字典中包含一个元素(一个键和一个值)。可能是由于某个变量的改变导致键发生了改变。这时候用原来的键来取出字典的数据,会得到KeyError(因为键的值已经改变了),现在没办法从字典中获取该值啦,因为键本身的值发生了变化。由于字典中的键必须是可哈希的,所以数字和字符串可以作为字典中的键,但是列表和其他字典不行。

( 1 )字典的键不允许一个键对应多个值,如果对应多个值,则取最后一个。

( 2 )键必须是可哈希的。

( 3 )如果用元祖做有效的键,必须加以限制:元祖中只包含像数字和字符串这样的不可变参数,才可以作为字典中有效的       键。

7-3.

#!/usr/bin/env python
# coding: utf-8
# author: toddlerya
# date: Jan 18 2015

"""
7–3.
字典和列表的方法。
(a) 创建一个字典,并把这个字典中的键按照字母顺序显示出来。
(b) 现在根据已按照字母顺序排序好的键,显示出这个字典中的键和值。
(c)同(b),但这次是根据已按照字母顺序排序好的字典的值,显示出这个字典中的键和值。(注
意:对字典和哈希表来说,这样做一般没有什么实际意义,因为大多数访问和排序(如果需要)都是
基于字典的键,这里只把它作为一个练习。)
"""

# (a) and (b)
print '-----------(a) and (b)-----------'
dict1 = {'a': 'w', 'c': 'v', 'e': 'y', 'b': 'x', 'd': 'z'}
for j in sorted(dict1):
    print "tht key is ", j, "and the value is ", dict1[j]

# (c)
print '----------------(c)--------------\n'
for value in sorted(dict1.values()):
    for key in dict1.keys():
        if dict1[key] == value:
            print "The key is", key, "The value is", value

/usr/bin/python2.7 /home/toddler/Documents/learn_python/python_core_pragrams/Chapter_7/7-3.py
-----------(a) and (b)-----------
tht key is  a and the value is  w
tht key is  b and the value is  x
tht key is  c and the value is  v
tht key is  d and the value is  z
tht key is  e and the value is  y
----------------(c)--------------

The key is c The value is v
The key is a The value is w
The key is b The value is x
The key is e The value is y
The key is d The value is z

Process finished with exit code 0

7-4.

#!/usr/bin/env python
# coding: utf-8
# author: toddlerya
# date: Jan 18 2015

"""
7-4.
建立字典。给定两个长度相同的列表,比如说,
列表[1, 2, 3,...]和['abc', 'def','ghi',...],
用这两个列表里的所有数据组成一个字典,像这样:{1:'abc', 2: 'def', 3: 'ghi',...}
"""

list1 = [1, 2, 3, 4, 5]
list2 = ['abc', 'def', 'ghi', 'jkl', 'mno']
dict1 = dict([(list1[int(i-1)], list2[i-1]) for i in list1])
print dict1





© 著作权归作者所有

toddler
粉丝 13
博文 33
码字总数 21659
作品 1
济南
QA/测试工程师
私信 提问
新手入门,学习《python核心编程》需要注意哪些,怎么提高效率

@fzyz_sb 你好,想跟你请教个问题: 你好,我这几天一直在学习《python核心编程》,在网上搜习题答案时找到的你的博客,所以这些天也一直是看着你的博客学习的。我计算机编程只是在学校开的c...

_keyboard_dancer_
2015/04/05
3K
3
《机器学习》(周志华)课后习题参考答案

目录: 周志华《机器学习》课后习题解答系列(二):Ch1 - 绪论 周志华《机器学习》课后习题解答系列(三):Ch2 - 模型评估与选择 周志华《机器学习》课后习题解答系列(四):Ch3 - 线性模...

kchai31
2018/01/04
0
0
那些年,我们学过的编程语言——Python篇

Hello World!不少人都与这句话邂逅在大家最初学习编程的时候。 2014年12月的编程语言排行榜中,Python位列在众多语言中的第8位,一直保持在前列。初学者看着简单清晰的语言极其容易上手。即...

生气的散人
2014/12/26
1K
4
开源 Python基础入门课程

  2016年11月至2017年2月,出于个人兴趣,我录制了《全栈数据工程师养成攻略》视频课程,收到了不错的反馈,目前在网易云课堂上已有1.8W人加入学习。      2017年9月至12月,我担任了一...

深度学习
2018/05/17
0
0
《趣学Python编程》习题总结

上周买了本书叫《趣学Python编程》(英文名:Python for kids),昨天看完后把书后面的题都做了下。由于第1、2章没有习题,第13章及之后都是描写实例的章节,因此这个总结性的文章中只包含了...

北风其凉
2014/12/01
10.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
45分钟前
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
48分钟前
5
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部