Re: [問題] 該怎麼用dict處理這個問題?

看板Python作者 (AM2)時間9年前 (2015/04/27 23:19), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/1
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
您好,謝謝您的指點,我好像搞錯了setdefault的用途...
04/27 23:48, 1F

04/28 11:01, , 2F
輸出時.的左邊並不是放原本的item,而是要放item種類@@
04/28 11:01, 2F
文章代碼(AID): #1LFbETHT (Python)