在COURSERA课程里面,老师教了两种sort Tuple的方法。
一种是:
dic = {'c':1,'b':2,'a':3}
ite = d.items()
t.sort()
print (t)
思路很清晰。意思是,你tuple不是不让sort嘛。我就利用dictionary里面的items 先把dic的key-value pair给输出,然后再sort(以key为目标)。恩,很赞。答案是Traceback。- -
Python 这只狗狗给我的回复是:
‘dict_items’ object has no attribute ‘sort’。
开始并不明白是几个意思,问题出在哪儿。直到我
print (d.items())
得到结果是:dict_items([(‘a’, 3), (‘c’, 1), (‘b’, 2)])。
从而发觉,Charles给的答案[(‘a’, 3), (‘c’, 1), (‘b’, 2)]。在python3.3.5已经不适用了。(顺便感慨一下python的更新速度,前两天因为matlab和python匹配地关系,卸载掉了python3.4(其实是直接删掉了)。发现python已经到3.5.0了,真是BT。。。)
但这样就不能sort dic的items了吗?其实不是的。Charcles给了另外一个办法。经测验OK!
dic = {'c':1,'b':2,'a':3}
t = sorted(d.items())
print (t)
乍一看,简洁了不少。其实就是把dic 的items和sort并在了一个命令行,只不过顺序啦,括号啦,sort有木有加ed啦。要注意一下。
经检验,结果正确。返回[(‘a’, 3), (‘b’, 2), (‘c’, 1)]。
很好。刚刚废话了一大堆。结果不小心删掉了。重来再来。不说废话。直接上菜!
这道题让把所有以’From ‘开头的句子中的‘Hour’找出来。再以‘Hour’的顺序print。啥意思?看desired output:
写code最重要一点是一步步来。我们可以分析。首先是要找以‘From ‘开头,恩,这里有一个startswith得用吧;齐次,我们看看例句,每一个以‘From ’开头的句子的格式,可以发现,先用split()将其拆分,然后把第六项(index=5)找出来,就可以得到整个时间段,然后再用split(:)将其拆分,就得到Hour Min Second,然后再把第一项(index=0)读入,得到Hour。最后放进一个dic里面。输出。
好啦,直接上code啦。该吃饭啦~~~~
name = raw_input("Enter file:")
if len(name) < 1 : name = "mbox-short.txt"
handle = open(name) #前文介绍过的【读入文件及其偷懒大法】
A = []
B = []
C = []
#筛选txt中以‘From ’开头的line,将其放置在一个List-A中。此时list中每个元素是line,类型为str。
for line in handle:
if line.startswith('From '):
A.append(line)
#print a # Pls ignore me
# 将list中的str类型的sens提取出。进行split()。每个a的第六项则为我们的time(格式为小时:分钟:秒)。
#将其放在list-B中。此时list中每个元素是time,类型为str。
for sens in A:
a = sens.split()
#print a[5]
B.append(a[5])
#print B
# 同样将list中的str类型的time提取出。进行split(':'),因为时间是以semicolon划分的,
#所以我们用semicolon进行split。每个b的第一项则为我们得HOUR。将其放在list-C中。
for time in B:
b = time.split(':')
#print b
C.append(b[0])
#print C
# 将C中的hour进行count,放进dic-d中。这里我们采用一种比较Advanced方法,用get(),其意思是,
#在把list的元素排排好放进dic过程中,若dic中并没有list元素,即key,则给value1,若有,则+1。
#最后的最后,我们按照desired output的形式进行print。#CAVEAT: 写作业的时候用的是网页版的
#autograder,所以是直接print k,v;用python3.x的时候要记得加()括号小朋友哦!
d={}
for hour in C:
d[hour]=d.get(hour,0)+1
#print d
item =d.items()
item.sort()
for k,v in item:
print k,v
这里有一个需要注意点是我们在该题中常用的split用法。split()是连接Str和List,但更确切地说,是将str split后放在一个LIST里面。也就是说,split只能对str作用。那本题中list和str的转换很重要。所以这里面的几个for很重要….
大功告成。最近有点小忙。Python继续,C#也要开始学了,项目火烧眉毛。G某要坚持哦~!(*  ̄3)(ε ̄ *)