python中字典数据的特点_Python第八课-另一种数据类型:字典 dictionary

一、字典(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一下吧。

0

1

分享到:

sina.jpg

tec.jpg

2012-09-19 00:22

浏览 2875

评论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值