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

本文通过《笨办法学Python》中的示例,详细介绍了Python字典的定义、使用方法及常见操作,包括嵌套调用、遍历和使用get函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《笨办法学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中所有值

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

1、支持屏幕打印,控制方法多样,可以打印全部rxlib控件全部InfoPower控件,TDBGrid,TStringGrid,TImage,TEdit等,TDBGridEh,f1book,TDecisionGrid等等众多控件。(例子1,例子2,例子3,例子4,例子5)   2、支持最终用户设计、修改报表,只需连接相关的数据源,指出数据的位置(设置报表样式),无论是主从表,子报表,套表,都可迅速生成。开发一个报表只需几分钟的时间。   3、报表样式可以保存为rmf格式,下次可通过读入使用(配合SQL脚本就可以生成报表)。并可以把带数据的报表保存为rmp格式,在任何机器上都可以浏览、打印,而不需要数据库。   4、生成后的报表支持修改,包括字体的设置,边框的设置,修改内容等。   5、报表编辑器内自带ado,bde,ibx,Diamond dao,dbisam等数据访问控件,可以通过这些控件开发独立的报表制作工具。其使用方法和delphi中的控件是一样的。   6、完全、自由自定义页面、边距、字体,标题和页眉页脚,并可以在自认合适的地方插入函数来实现当前日期,页合计,总合计等功能,合计字段可以放在页头,分组头,并支持条件合计,对分组合计,分页合计,总计等只需简单地设置属性即可。   7、完全支持D5--D7,BCB5--BCB6。   8、报表中可以在自认合适的事件(on beforeprint,on afterprint等)中加入程序脚本,以控制、或实现更复杂的打印效果。   9、更新迅速,可根据使用人员用户的意见,不断的加入新的功能。   10、多种格式转换,可以把做出的报表转换为html,xls,pdf,bmp,jpeg等等格式。   11、自动对超长记录折行,超长的内容也会自动折行,中文换行不会乱码。   12、首家支持缩放打印功能,可以根据打印时选择的纸张自动缩放报表。   13、首家支持即打即停.   14、首家提供类似excel的报表设计器,给你足够灵活方表的报表设计方式。   15、首家提供双报表设计器(第一种,第二种),满足所有的需求。   16、更是提供类似于ObjectPascal的script,实现特殊功能。   17、首家提供web,IntraWeb中的报表解决方案。   18、首家提供报表压缩处理,占用内存更少,生成报表速度更快。   19、首家提供合并单元格功能,更加适应处理复杂的中文报表。   20、自动填空行,每页打印数量等细节处理更完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值