笨办法学Python(四十)
习题 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 做变量名,你后面可能会碰到问题。
你应该看到的结果
加分习题
- 在 Python 文档中找到 dictionary (又被称作 dicts, dict)的相关的内容,学着对 dict 做更多的操作。
- 找出一些 dict 无法做到的事情。例如比较重要的一个就是 dict 的内容是无序的,你可以检查一下看看是否真是这样。
- 试着把 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(四十)的更多相关文章
- 笨办法学Python(十四)
习题 14:提示和传递 让我们使用 argv 和 raw_input 一起来向用户提一些特别的问题.下一节习题你会学习如何读写文件,这节练习是下节的基础.在这道习题里我们将用略微不同的方法使用 raw ...
- 笨办法学Python(十九)
习题 19: 函数和变量 函数这个概念也许承载了太多的信息量,不过别担心.只要坚持做这些练习,对照上个练习中的检查点检查一遍这次的联系,你最终会明白这些内容的. 有一个你可能没有注意到的细节,我们现在 ...
- 笨办法学Python(十八)
习题 18: 命名.变量.代码.函数 标题包含的内容够多的吧?接下来我要教你“函数(function)”了!咚咚锵!说到函数,不一样的人会对它有不一样的理解和使用方法,不过我只会教你现在能用到的最简单 ...
- 笨办法学Python(十五)
习题 15: 读取文件 你已经学过了 raw_input 和 argv,这些是你开始学习读取文件的必备基础.你可能需要多多实验才能明白它的工作原理,所以你要细心做练习,并且仔细检查结果.处理文件需要非 ...
- 笨办法学Python(十二)
习题 12:提示别人 当你键入 raw_input() 的时候,你需要键入 ( 和 ) 也就是“括号(parenthesis)”.这和你格式化输出两个以上变量时的情况有点类似,比如说 "%s ...
- 笨办法学Python(十)
习题 10: 那是什么? 在习题 9 中我你接触了一些新东西.我让你看到两种让字符串扩展到多行的方法.第一种方法是在月份之间用 \n (back-slash n )隔开.这两个字符的作用是在该位置上放 ...
- 笨办法学Python(十六)
习题 16: 读写文件 如果你做了上一个练习的加分习题,你应该已经了解了各种文件相关的命令(方法/函数).你应该记住的命令如下: close – 关闭文件.跟你编辑器的 文件->保存.. 一个意 ...
- 《笨办法学 Python(第四版)》高清PDF|百度网盘免费下载|Python编程
<笨办法学 Python(第四版)>高清PDF|百度网盘免费下载|Python编程 提取码:jcl8 笨办法学 Python是Zed Shaw 编写的一本Python入门书籍.适合对计算机 ...
- 笨办法学python 第四版 中文pdf高清版|网盘下载内附提取码
笨办法学 Python是Zed Shaw 编写的一本Python入门书籍.适合对计算机了解不多,没有学过编程,但对编程感兴趣的朋友学习使用.这本书以习题的方式引导读者一步一步学习编 程,从简单的打印一 ...
- 笨办法学 Python (Learn Python The Hard Way)
最近在看:笨办法学 Python (Learn Python The Hard Way) Contents: 译者前言 前言:笨办法更简单 习题 0: 准备工作 习题 1: 第一个程序 习题 2: 注 ...
随机推荐
- bzoj1004 [HNOI2008]Cards Burnside定理+背包
题目传送门 思路:首先是Burnside引理,要先学会这个博客. Burnside引理我们总结一下,就是 每种置换下不动点的数量之和除以置换的总数,得到染色方案的数量. 这道题,显然每种 ...
- D. Magic Gems(矩阵快速幂 || 无敌杜教)
https://codeforces.com/contest/1117/problem/D 题解:有一些魔法宝石,魔法宝石可以分成m个普通宝石,每个宝石(包括魔法宝石)占用1个空间,让你求占用n个空间 ...
- 关于cin 与 cout 的加速
在用cin 与 cout 的时候 可以使用 ios::sync_with_stdio(); cin.tie(); cout.tie(); 这样在输入大数据的时候可以加快许多
- 在OnActionExecuted 获取请求参数的值(包含类类型)
1.在OnActionExecuting里 获取请求参数的值 比较简单 /// <summary> /// 获取首参数的值 /// </summary> /// <par ...
- python操作Spark常用命令
1. 获取SparkSession spark = SparkSession.builder.config(conf = SparkConf()).getOrCreate() 2. 获取SparkCo ...
- ssh设置超时时间
修改server端的etc/ssh/sshd_config ClientAliveInterval 60 #server每隔60秒发送一次请求给client,然后client响应,从而保持连接 Cli ...
- TOJ 2814 Light Bulb
Description Compared to wildleopard's wealthiness, his brother mildleopard is rather poor. His house ...
- <div>里用display:block有用么?
对所有的块元素都没有意义,块元素的dispaly属性默认值为block,没必要再显式定义--除非你之前对块元素的display属性重新定义过. =========================== ...
- What is Network Address Translation?---reference
http://whatismyipaddress.com/nat What is Network Address Translation? Network Address Translation (N ...
- 创建Django项目时,settings的静态文件的配置
STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), )