习题 40: 字典, 可爱的字典

接下来我要教你另外一种让你伤脑筋的容器型数据结构,因为一旦你学会这种容器,你将拥有超酷的能力。这是最有用的容器:字典(dictionary)。

Python 将这种数据类型叫做 “dict”,有的语言里它的名称是 “hash”。这两种名字我都会用到,不过这并不重要,重要的是它们和列表的区别。你看,针对列表你可以做这样的事情:

 >>> things = ['a', 'b', 'c', 'd']
>>> print things[]
b
>>> things[] = 'z'
>>> print things[]
z
>>> print things
['a', 'z', 'c', 'd']
>>>

你可以使用数字作为列表的索引,也就是你可以通过数字找到列表中的元素。而 dict 所作的,是让你可以通过任何东西找到元素,不只是数字。是的,字典可以将一个物件和另外一个东西关联,不管它们的类型是什么,我们来看看:

 >>> stuff = {'name': 'Zed', 'age': , 'height': *+}
>>> print stuff['name']
Zed
>>> print stuff['age'] >>> print stuff['height'] >>> stuff['city'] = "San Francisco"
>>> print stuff['city']
San Francisco
>>>

你将看到除了通过数字以外,我们还可以用字符串来从字典中获取 stuff ,我们还可以用字符串来往字典中添加元素。当然它支持的不只有字符串,我们还可以做这样的事情:

 >>> stuff[] = "Wow"
>>> stuff[] = "Neato"
>>> print stuff[]
Wow
>>> print stuff[]
Neato
>>> print stuff
{'city': 'San Francisco', : 'Neato',
'name': 'Zed', : 'Wow', 'age': ,
'height': }
>>>

在这里我使用了两个数字。其实我可以使用任何东西,不过这么说并不准确,不过你先这么理解就行了。

当然了,一个只能放东西进去的字典是没啥意思的,所以我们还要有删除物件的方法,也就是使用 del 这个关键字:

 >>> del stuff['city']
>>> del stuff[]
>>> del stuff[]
>>> stuff
{'name': 'Zed', 'age': , 'height': }
>>>

接下来我们要做一个练习,你必须非常仔细,我要求你将这个练习写下来,然后试着弄懂它做了些什么。这个练习很有趣,做完以后你可能会有豁然开朗的感觉。

 cities = {'CA': 'San Francisco', 'MI': 'Detroit',
'FL': 'Jacksonville'} cities['NY'] = 'New York'
cities['OR'] = 'Portland' def find_city(themap, state):
if state in themap:
return themap[state]
else:
return "Not found." # ok pay attention!
cities['_find'] = find_city while True:
print "State? (ENTER to quit)",
state = raw_input("> ") if not state: break # this line is the most important ever! study!
city_found = cities['_find'](cities, state)
print city_found

Warning

注意到我用了 themap 而不是 map 了吧?这是因为 Python 已经有一个函数称作 map 了,所以如果你用 map 做变量名,你后面可能会碰到问题。

你应该看到的结果

加分习题

  1. 在 Python 文档中找到 dictionary (又被称作 dicts, dict)的相关的内容,学着对 dict 做更多的操作。
  2. 找出一些 dict 无法做到的事情。例如比较重要的一个就是 dict 的内容是无序的,你可以检查一下看看是否真是这样。
  3. 试着把 for-loop 执行到 dict 上面,然后试着在 for-loop 中使用 dict 的 items() 函数,看看会有什么样的结果。

习题练习

Python中的字典:

Python种的字典(key)和(value)组成。键(key)相当于我们日常生活中字典的页码,是一种索引或者说地址,每一个键都对应一个值。键和值实际组成了一个散列函数。

下表是字典的常用操作:

Operation Result
len(a) the number of items in a 得到字典中元素的个数
a[k] the item of a with key k 取得键K所对应的值
a[k] = v set a[k] to v 设定键k所对应的值成为v
del a[k] remove a[k] from a 从字典中删除键为k的元素
a.clear() remove all items from a 清空整个字典
a.copy() a (shallow) copy of a 得到字典副本
k in a True if a has a key k, else False 字典中存在键k则为返回True,没有则返回False
k not in a Equivalent to not k in a 字典中不存在键k则为返回true,反之返回False
a.has_key(k) Equivalent to k in a, use that form in new code 等价于k in a
a.items() a copy of a’s list of (key, value) pairs 得到一个键值的list
a.keys() a copy of a’s list of keys 得到键的list
a.update([b]) updates (and overwrites) key/value pairs from b 从b字典中更新a字典,如果键相同则更新,a中不存在则追加
a.fromkeys(seq[, value]) Creates a new dictionary with keys from seq and values set to value 创建一个新的字典,键来自seq,值对应键对应的值
a.values() a copy of a’s list of values 得到字典值的副本
a.get(k[, x]) a[k] if k in a, else x 得到a[k],若存在返回x
a.setdefault(k[, x]) a[k] if k in a, else x (also setting it) 得到a[k],若不存在返回x,并设定为x
a.pop(k[, x]) a[k] if k in a, else x (and remove k) 弹出a[k],若不存在则返回x,同时将删除k键
a.popitem() remove and return an arbitrary (key, value) pair 弹出a中对象的键和值,并删除弹出的键和值
a.iteritems() return an iterator over (key, value) pairs 返回a中所有对象(键和值)
a.iterkeys() return an iterator over the mapping’s keys 返回a中所有键(索引)
a.itervalues() return an iterator over the mapping’s values 返回a中所有值

笨办法学Python(四十)的更多相关文章

  1. 笨办法学Python(十四)

    习题 14:提示和传递 让我们使用 argv 和 raw_input 一起来向用户提一些特别的问题.下一节习题你会学习如何读写文件,这节练习是下节的基础.在这道习题里我们将用略微不同的方法使用 raw ...

  2. 笨办法学Python(十九)

    习题 19: 函数和变量 函数这个概念也许承载了太多的信息量,不过别担心.只要坚持做这些练习,对照上个练习中的检查点检查一遍这次的联系,你最终会明白这些内容的. 有一个你可能没有注意到的细节,我们现在 ...

  3. 笨办法学Python(十八)

    习题 18: 命名.变量.代码.函数 标题包含的内容够多的吧?接下来我要教你“函数(function)”了!咚咚锵!说到函数,不一样的人会对它有不一样的理解和使用方法,不过我只会教你现在能用到的最简单 ...

  4. 笨办法学Python(十五)

    习题 15: 读取文件 你已经学过了 raw_input 和 argv,这些是你开始学习读取文件的必备基础.你可能需要多多实验才能明白它的工作原理,所以你要细心做练习,并且仔细检查结果.处理文件需要非 ...

  5. 笨办法学Python(十二)

    习题 12:提示别人 当你键入 raw_input() 的时候,你需要键入 ( 和 ) 也就是“括号(parenthesis)”.这和你格式化输出两个以上变量时的情况有点类似,比如说 "%s ...

  6. 笨办法学Python(十)

    习题 10: 那是什么? 在习题 9 中我你接触了一些新东西.我让你看到两种让字符串扩展到多行的方法.第一种方法是在月份之间用 \n (back-slash n )隔开.这两个字符的作用是在该位置上放 ...

  7. 笨办法学Python(十六)

    习题 16: 读写文件 如果你做了上一个练习的加分习题,你应该已经了解了各种文件相关的命令(方法/函数).你应该记住的命令如下: close – 关闭文件.跟你编辑器的 文件->保存.. 一个意 ...

  8. 《笨办法学 Python(第四版)》高清PDF|百度网盘免费下载|Python编程

    <笨办法学 Python(第四版)>高清PDF|百度网盘免费下载|Python编程 提取码:jcl8 笨办法学 Python是Zed Shaw 编写的一本Python入门书籍.适合对计算机 ...

  9. 笨办法学python 第四版 中文pdf高清版|网盘下载内附提取码

    笨办法学 Python是Zed Shaw 编写的一本Python入门书籍.适合对计算机了解不多,没有学过编程,但对编程感兴趣的朋友学习使用.这本书以习题的方式引导读者一步一步学习编 程,从简单的打印一 ...

  10. 笨办法学 Python (Learn Python The Hard Way)

    最近在看:笨办法学 Python (Learn Python The Hard Way) Contents: 译者前言 前言:笨办法更简单 习题 0: 准备工作 习题 1: 第一个程序 习题 2: 注 ...

随机推荐

  1. QQ链接病毒分析

    QQ链接病毒分析 特征 点击病毒链接后,自动会在每一时刻范围内通过所有途径群发新的病毒链接(途径包括Qzone,群聊等) 分析 首先看一下病毒链接的一个样例 http://news.soso.com/ ...

  2. log4j详解与实战

    [转自] http://www.iteye.com/topic/378077 log4j是一个非常强大的log记录软件,下面我们就来看看在项目中如何使log4j. 首先当然是得到log4j的jar档, ...

  3. h5列表页的性能优化

    //0.还原状态 caoke.loading=false $(".loadbtn").text("点击加载更多") //1 还没有任何数据的情况 if(data ...

  4. aoj0525

    一.题意:题目大致是讲一个烧饼铺烤烧饼,在一个n X m (1<=n<=10,1<=m<=10000)的烤桌上面摆着一堆烧饼,数字1表示烧饼正面,0表示烧饼反面.然后你每次可以 ...

  5. h5 的video视频控件

    h5 的video视频控件 由于html5的流行,其中的video视频的使用很流行,使得可恨的IE9也能与时俱进了. video所支持的格式有mp4.ogg和wav三种. 例: HTML5 Video ...

  6. zabbix-proxy 层级制监控

    一,zabbix服务规划 zabbix-server 10.0.0.71 zabbix-proxy 10.0.0.72 172.16.1.72 web01  172.16.1.7 二,zabbix 客 ...

  7. python 爬虫系列05--丑事百科

    丑事百科爬虫 import re import requests def parse_page(url): headers = { 'User-Agent':'user-agent: Mozilla/ ...

  8. js栈内存和堆内存的区别

    首先JavaScript中的变量分为基本类型和引用类型.基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象. 1.基本类型 基本类型有Undefined.Null.Boo ...

  9. Git~GitLab当它是一个源代码管理工具时

    最近开始接触和使用GitLab,用它来做源代码的版本控制,CI.CD持续集成和持续交付,感觉功能确实很强大,今天也只能先说一下它的源代码管理功能,核心就是GIT,对GIT进行了封装,提供了一些扩展功能 ...

  10. android应用签名详解

    1.Eclipse工程中右键工程,弹出选项中选择 android工具-生成签名应用包: 2.选择需要打包的android项目工程: 3.如果已有私钥文件,选择私钥文件 输入密码,如果没有私钥文件见 第 ...