作者Dong0129 (阿东)
看板Python
标题[问题] 该怎麽用dict处理这个问题?(附上code@@)
时间Mon Apr 27 21:19:14 2015
各位版友好,
请问我该如何运用dict转换以下需求?
file1:
2>4
1>2
2>3
3>5
3>1
1>4
4>2
.
.
.
转换成:
file2:
1.1>2.1
3.1>1.2
1.3>4.1
4.2>5.1
4.3>3.2
3.3>2.2
2.3>1.4
.
.
.
即.左边的数字为第几种,而.右边的数字为出现几次,
麻烦各位大大帮帮忙了!
目前撰写的程式为:
rfd=open(file1,"r")
wfd.open(file2,"w")
dict_file=dict()
num={}
seq={}
for line in rfd.read().splitlines():
item1,item2=line.split('>')
for item in (item1,item2):
if not item in num:
num[item]=1
seq[item]=len(num.keys())
else:
num[item]+=1
dict_file.setdefault(item,str(seq[item])+"."+str(num[item]))
wfd.write(dict_file[item1]+'>'+dict_file[item2])
rfd.close()
wfd.close()
file2的内容:
1.1>2.1
3.1>1.1
1.1>4.1
.
.
.
好像在执行dict_file.setdefault那ㄧ句写不进去...
请问我有哪里写错吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.137.109.243
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1430140757.A.DBB.html
1F:→ SocketAM2: 这是在帮版友做智力测验吗? 04/27 21:36
不是@@因为我对於dict的用法还不太熟,
因此想要请教其他版友的写法为何
※ 编辑: Dong0129 (220.137.109.243), 04/27/2015 21:42:22
2F:→ SocketAM2: 看了5分钟才懂 我果然是笨蛋 04/27 21:41
...应该是我表达能力不够好...下次会用比较好的举例方式...
※ 编辑: Dong0129 (220.137.109.243), 04/27/2015 21:52:33
3F:推 mars90226: 这个问题跟你上次问得很像啊? 04/27 22:06
嗯嗯,但有个小地方不同,
上次是如果file1有相同的资料,file2就不给新的代号,
这次想要做到即使是相同资料,也会给新的代号
对於dict的概念还不够熟,目前也正在写程式,
谢谢您!
※ 编辑: Dong0129 (220.137.109.243), 04/27/2015 22:13:03
※ 编辑: Dong0129 (220.137.109.243), 04/27/2015 22:42:30
※ 编辑: Dong0129 (220.137.109.243), 04/27/2015 22:42:46
※ 编辑: Dong0129 (220.137.109.243), 04/27/2015 22:53:31
谢谢你们,有好多种写法啊...慢慢研究,谢谢!!
※ 编辑: Dong0129 (220.137.114.148), 04/28/2015 11:00:30
7F:→ gh40402: setdefault 那行改成 04/28 14:54
8F:→ gh40402: dict_file[item]=str(seq[item]) + "." + str(num[item]) 04/28 14:54
9F:→ gh40402: 就行了吧 04/28 14:54
10F:→ gh40402: 你用 setdefault 的话根本不会更新 所以最後得到都是 x.1 04/28 14:56
嗯...我ㄧ直以为setdefault是设定item对应","之後的资料,後来才发现原来是没有item
时才设定...
※ 编辑: Dong0129 (220.137.114.148), 04/28/2015 15:00:48
11F:→ gh40402: d.setdefaut(k, v) 是说去看d的key有无k 有的话回传d[k] 04/28 15:00
12F:→ gh40402: 没的话就做 d[k] = v 然後回传 v 04/28 15:00
谢谢您!
※ 编辑: Dong0129 (220.137.114.148), 04/28/2015 15:03:53