设为首页 收藏本站
查看: 721|回复: 0

[经验分享] Python第八课-另一种数据类型:字典 dictionary

[复制链接]

尚未签到

发表于 2017-5-3 11:17:45 | 显示全部楼层 |阅读模式
一、字典(dictionary)简介:
字典是python提供的另外一种数据类型,它有以下几个特征:
1、字典和列表一样都是可变的数据类型
1、字典内的元素是“键(key):值(value)”类型的
2、字典是一种无序的数据集合,不会以元素的key或者value排序
3、列表是以偏移量来存取、查询数据,而字典是根据key来查询、存取数据
创建字典:

d = {}
d = dict()
插入元素:
d['key'] = 'value'
根据键来查询值:
d['key'] #返回此key对应的value
删除元素:
del d['key'] 删除此key的元素
d.pop('key') 删除元素并返回其value
其他的方法和用法各位google去吧!

二、用字典来改写第七课的内容
需要读取文本文件的数据格式有所改变(再次提示:这里所提的练习用文件都可在《head first python》一书的官方网站上下载到
上一课'james.txt'文件中的数据全部为练习成绩(时间)
2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16
这一课'james2.txt'文件中变更为成绩(时间)前边加上了选手的名字、生日
James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16
此情况下改为字典类型来表示数据更为合适(当然用列表也可以,但容易让人费解)
格式化时间的sanitize函数保持不变(当下没理由改变它!)

def sanitize(time):
'''此函数作用为格式化字符串,将字符串中的':'和'-'更换为'.'
参数time为待格式化的字符串'''
if '-' in time:
splitter = '-'
(mins, secs) = time.split(splitter)
elif ':' in time:
splitter = ':'
(mins, secs) = time.split(splitter)
else:
return(time)
return(mins + '.' + secs)

因为文件内包含了时间外的数据,如名字和生日,所以获取文件内时间的函数get_times更改为get_data,并修改函数,将所有元素存入athlete字典,用来获取名字、生日、成绩(时间)

def get_data(filename):
athlete = {} #定义一个字典,以便后边代码为其添加元素
try:
with open(filename) as f:
data = f.readline()
ldata = data.strip().split(',')
athlete['name'] = ldata.pop(0) #list的pop方法用来删除指定偏移量位置的元素,并返回该元素
athlete['dob'] = ldata.pop(0)
clean_times = [sanitize(each_time) for each_time in ldata]
athlete['times'] = clean_times #把clean_times列表作为times键的值
return(athlete)
except IOError as ioerr:
print('file missing: ' + str(ioerr))

调用一下get_data函数来看一下结果:
print(get_times('james2.txt'))
结果:
{'dob': '2002-3-14', 'name': 'James Lee', 'times': ['2.34', '3.21', '2.34', '2.45', '3.01', '2.01', '2.01', '3.10', '2.22', '2.01', '2.01', '2.16']}
返回前最快的三个时间值的get_top3函数也无需修改

def get_top3(times_list):
stimes = set(times_list)
sorted_times = sorted(stimes)
return(sorted_times[0:3])

调用下get_top3函数看结果:

james_data = get_times('james2.txt')
james_top3 = get_top3(james_data['times']) #返回athlete字典中times键中时间最短的三个元素
print(james_data['name'] + '\'s best result is ' + str(james_top3))

结果:
'James Lee's best result is ['2.01', '2.16', '2.22']'
好了,你还想最后打印结果好看点就把james_top3列表for一下吧。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-372513-1-1.html 上篇帖子: python为什么不需要swap(a,b) 下篇帖子: Windows下Python第三方库安装问题的解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表