Re: [問題] 該怎麼用dict處理這個問題?
counter_dict = dict()
with open(output_file, 'wb') as fo:
with open(file1, 'rb') as fi:
for line in fi.read().splitlines():
try:
pair = left, right = line.split('>') # format check
for item in pair:
try:
counter_dict[item] += 1
except:
counter_dict.setdefault(item, 1)
fo.write("{l}.{num_l}>{r}.{num_r}\n".format(
l = left, num_l = counter_dict[left],
r = right, num_r = counter_dict[right] )
except ValueError: # this line is not "X>Y"
# case 1: "too many values to unpack"
# case 2: "need more than 1 value to unpack"
fo.write('Invalid line: {original}\n'.format(original=line))
continue
except: # unexpected error
raise
能保證輸入的格式的話
外層的try、except可以拿掉 (最內層要留著)
但應該不會感覺到速度差異
沒有真的測過,只是練習一下語法
希望沒有錯太多,歡迎各位高手指正
※ 引述《Dong0129 (阿東)》之銘言:
: 標題: [問題] 該怎麼用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
: .
: .
: .
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.137.109.243
: ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1430140757.A.DBB.html
: → SocketAM2: 這是在幫版友做智力測驗嗎? 04/27 21:36
:
: 不是@@因為我對於dict的用法還不太熟,
:
: 因此想要請教其他版友的寫法為何
: ※ 編輯: Dong0129 (220.137.109.243), 04/27/2015 21:42:22
: → SocketAM2: 看了5分鐘才懂 我果然是笨蛋 04/27 21:41
:
: ...應該是我表達能力不夠好...下次會用比較好的舉例方式...
: ※ 編輯: Dong0129 (220.137.109.243), 04/27/2015 21:52:33
: 推 mars90226: 這個問題跟你上次問得很像啊? 04/27 22:06
: → mars90226: #1LBrjrc0 (Python) 04/27 22:07
:
: 嗯嗯,但有個小地方不同,
: 上次是如果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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.23.186
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1430147997.A.45D.html
推
04/27 23:48, , 1F
04/27 23:48, 1F
→
04/28 11:01, , 2F
04/28 11:01, 2F