《笨办法学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),相当于我们日常生活中字典的页码,是一种索引或者说地址,每一个键都对应一个值。

OperationResult
len(a)the number of items in a 得到字典中元素的个数
a[k]the item of a with key k 取得键K所对应的值
a[k] = vset 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 aTrue if a has a key k, else False 字典中存在键k则为返回True,没有则返回False
k not in aEquivalent 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中所有值

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

posted @ 2016-02-13 10:53  从流域到海域  阅读(52)  评论(0编辑  收藏  举报