笨办法学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: 注 ...
随机推荐
- 2018南京icpc现场赛心得
第一次参加icpc的比赛,也是第一块奖牌,虽然只是铜,但其实打的已经很好了,稍微差一点就可以摸银了. 之前参加省赛,成为那次比赛我校唯一一个没拿奖的队伍,其实还是一直都有一些心结的,而这段时间和新的队 ...
- 江西理工大学南昌校区排名赛 C: 单身狗的地图游戏
题目描述 萌樱花是一只单身狗. 萌樱花今天决定去喜欢的学妹家玩,但他不记得路,于是他拿出有n个点的完全图,选取了k条不同的路. 完全图:n 个点的图中任意两个点之间都有一条边相连,所以有 n*(n-1 ...
- UVA - 11552 DP 划分
每k个字符划分一个组,该组内字符顺序可以任意重排,定义块为最长的连续的字符子串,求长度为m*k的字符串中最少的块的数目 设\(dp[i][j]\):前\(i\)组中第\(i\)组结尾为\(j\)的最优 ...
- ActionHelper
/// <summary> /// 方法帮助类 /// </summary> public class ActionHelper { /// <summary> / ...
- [转] 【译】让人倾倒的 11 个 npm trick
[From] https://segmentfault.com/a/1190000006804410 本文转载自:众成翻译译者:文蔺链接:http://www.zcfy.cc/article/1206 ...
- 4.显式锁 Lock
4.1 概念 内置锁 vs 显示锁 synchronize是java语言层面实现的锁,称为内置锁.使用方便代码简洁,而且在jdk新版本优化后,性能也得到了很大的提高.synchronize是一个可重入 ...
- 实现Docker跨主机间的容器网络联通
Server1(Server) 192.168.81.58 内核版本 3.10.0-123.el7.x86_64 Docker版本 1.12.6Server2(Agent) 192.168.81.5 ...
- (转)source、sh、bash、./执行脚本的区别
source.sh.bash../执行脚本的区别 原文:https://www.cnblogs.com/sparkbj/p/5976100.html 1.source命令用法: source Fil ...
- springsource-tool-suite下载(sts)
1 新版本的插件下载 1 直接进入官网下载即可 官网地址:http://spring.io/tools/sts/all. 2 spring官网上下载历史版本的spring插件 1 获取新版本的插件的地 ...
- TOJ 1885 Triangles
Description It is always very nice to have little brothers or sisters. You can tease them, lock them ...