《笨办法学Python》 第38课手记

《笨办法学Python》 第38课手记

注意这是第三版的《笨办法学Python》的内容,我后来发现第三版存在很大的问题,就放弃了第三版开始使用第四版,第四版的第38课是读代码,这里保留之前的手记,因为它们是有价值。

不在写第四课的手记,因为是读代码课。但是之后的课程手记全部是针对第四版的,第三版弃之不用了。

本节课内容较多,可以慢慢理解,虽然标题是列表,但实际其实是一种叫做字典(dict)的数据结构。

列表是有序排列的一些物件,而字典是将一些物件(keys)对应到另外一些物件(values) 的数据结构。这句话出自39课的常见问题解答。

原代码如下(缩进统一使用四个空格):

# create a mapping of state to abbreviation
states = {
    'Oregon': 'OR',
    'Florida': 'FL',
    'California': 'CA',
    'New York': 'NY',
    'Michigan': 'MI',   
}

# create a basic set of states and some cities in them
cities = {
    'CA': 'San Francisco',
    'MI': 'Detroit',
    'FL': 'Jacksonville'
}

# add some more cities
cities['NY'] = 'New York'
cities['OR'] = 'Portland'

# print out some cities
print '-' * 10
print "NY State has: ", cities['NY']
print "OR State has: ", cities['OR']

# print some states
print '-' * 10
print "Michigan's abbreviation is: ", states['Michigan']
print "Florida's abbreviation is: ", states['Florida']

# do it by using the states then cities dict
print '-' * 10
print "Michigan has: ", cities[states['Michigan']]
print "Florida has: ", cities[states['Florida']]


# print every state abbreviation
print '-' * 10
for state, abbrev in states.items():
    print "%s is abbreviated %s" % (state, abbrev)

# print every city in state
print '-' * 10
for abbrev, city in cities.items():
    print "%s has the city %s" % (abbrev, city)

# now do both at the same time
print '-' * 10
for state, abbrev in states.items():
    print "%s state is abbreviated %s and has city %s" % (
        state, abbrev, cities[abbrev])

print '-' * 10
# safely get a abbreviation by state that might not be there
state = states.get('Texas', None)

if not state:
    print "Sorry, no Texas."

# get a city with a default values
city = cities.get('TX', 'Does Not Exist')
print "The city for the state 'TX' is: %s" % city

结果如下:

一块一块地来解释吧。

首先定义了字典,这里有两种定义(事实上第二种是在添加字典中的元素)的方式。

① 第一种: states = { ‘Oregon’: ‘OR’, ‘Florida’: ‘FL’, ‘California’: ‘CA’, ‘New York’: ‘NY’, ‘Michigan’: ‘MI’, } 第二种: cities[‘NY’] = ‘New York’ cities[‘OR’] = ‘Portland’

而在使用时,以states[‘缩写’]的形式即可表示相应的字符串,这比数组强大的多,数组只能以基数来区分其中的元素,列表以缩写来区分,显然方便的多,使用时不再要求你记住数值,缩写是你在学英语时以及记住的东西。

② print ‘-’ * 10 print “Michigan has: “, cities[states[‘Michigan’]] print “Florida has: “, cities[states[‘Florida’]]

这里是嵌套调用,因为states和cities是在定义时就是嵌套定义的,所以可以嵌套使用,请记住这个用法。

③ print ‘-’ * 10 for state, abbrev in states.items(): print “%s is abbreviated %s” % (state, abbrev)

abbrev也是一个关键字,是指列表中元素的缩写。states.item()会遍历states里面的所有内容。

④ state = states.get(‘Texas’, None) 这里涉及到get函数。

描述: Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值。

语法:

dict.get(key, default=None)

参数: key – 字典中要查找的键。 default – 如果指定键的值不存在时,返回该默认值值。

返回值: 返回指定键的值,如果值不在字典中返回默认值None。None是一个逻辑值,表示为假。所以if语句满足运行的条件,而最后一块代码中变量city中储存的值不是一个逻辑值而是字符串。

本节课涉及的知识

其实本节课这种类型的列表变量还有专门的名字叫做字典(dict),字典由键和值组成,键是数据库里面的键(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中所有值

建议每天看一遍,一个星期之后就能牢记于心。也可以先记住本机课涉及的内容,碰到字典再来翻这一节课。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SeanCheney的专栏

《利用Python进行数据分析·第2版》第3章 Python的数据结构、函数和文件3.1 数据结构和序列3.2 函数3.3 文件和操作系统3.4 结论

本章讨论Python的内置功能,这些功能本书会用到很多。虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具...

4726
来自专栏程序员互动联盟

【编程基础】C++比C牛逼的七个点

1. 函数检测增强 ? 在C语言中,重复定义多个同名的全局变量是合法的,在C++中,不允许定义多个同名的全局变量。 C语言中多个同名的全局变量最终会被链接到全局...

3555
来自专栏技术小站

c++(二)

算数运算符:+,-,*,/,%,++,--  进行算数运算时,如果存在溢出,则把溢出的部分拿掉(浮点型的难以预测),如 int i=0xffffffff,j;j...

1061
来自专栏Crossin的编程教室

关于函数参数传递,80%人都错了

https://docs.python.org/3/faq/programming.html#how-do-i-write-a-function-with-ou...

1273
来自专栏向治洪

模板方法模式

概述 概念:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。模板方法模式属于行为类模式。 模板...

2077
来自专栏marsggbo

c++学习笔记之继承篇

一 继承方式 public ? protected ? private ? 二 多继承和多重继承 举个例子就明白了 多继承 :农民工就算是多继承。 graph...

2027
来自专栏信数据得永生

JavaScript 编程精解 中文第三版 六、对象的秘密

3016
来自专栏我是攻城师

Java里面关于数组拷贝的几种方式

3074
来自专栏IT可乐

Java数据结构和算法(九)——高级排序

  春晚好看吗?不存在的!!!   在Java数据结构和算法(三)——冒泡、选择、插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(...

4026
来自专栏Python研发

一起来学Go --- (go的枚举以及数据类型)

枚举指一系列的相关的常量,比如下面关于一个星期的中每天的定义,通过上篇博文,我们可以用在const后跟一对圆括号的方式定义一组常量,这种定义法在go语言中通常用...

1051

扫码关注云+社区

领取腾讯云代金券