[問題] 用dict{}來實現英文字典

看板Python作者 (tgrk)時間11年前 (2013/01/04 21:31), 編輯推噓6(6016)
留言22則, 11人參與, 最新討論串1/1
我想做一個英文字典的搜尋程式, 如果說單字與解釋都存在文字檔, 像下面這樣: apple:fruit boy:animal cat:animal 然後裝在dict裡面變成這樣: english_dict = {'apple': 'fruit', 'boy': 'animal', 'cat': 'animal'} 我想問,如果有好幾萬比單字,全放入dict裡面查找, 這樣不會變得很慢嗎? 還是說有其他比較好的方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.171.250.105

01/04 21:37, , 1F
幾萬筆對電腦來說跟本不成問題吧?
01/04 21:37, 1F

01/04 21:42, , 2F
一種方法是一個個字母來找
01/04 21:42, 2F

01/04 21:46, , 3F
例如把apple的資訊放到
01/04 21:46, 3F

01/04 21:46, , 4F
english_dict[97][112][112][108][101][0]
01/04 21:46, 4F

01/04 21:47, , 5F
一開始把資料結構載入的時候會慢, 載入後就快了
01/04 21:47, 5F

01/04 21:47, , 6F
不過如果你的資料就只有上面那樣, 那速度應該不是問題
01/04 21:47, 6F

01/05 10:25, , 7F
四樓的ram夠用嗎...?
01/05 10:25, 7F

01/05 10:26, , 8F
剛剛試了一下,生成11881373(11M-item)的dict花了10sec,
01/05 10:26, 8F

01/05 10:31, , 9F
lookup也只花us (不過dict的大小.... 1G)
01/05 10:31, 9F

01/05 10:36, , 10F
然後如果hash對你來說還是太慢的話,你也只剩下自己寫c-module
01/05 10:36, 10F

01/05 10:36, , 11F
可以解決了
01/05 10:36, 11F

01/05 11:45, , 12F
dict就是一種hash的應用, 利用空間換取速度 要是用list去做
01/05 11:45, 12F

01/05 11:46, , 13F
資料稍微大一點是會吐血的 O(n)和O(1)基本上差異還是很大
01/05 11:46, 13F

01/05 15:55, , 14F
謝謝,我大概了解了,我先自己試試dict好了
01/05 15:55, 14F

01/05 16:01, , 15F
如果太耗記憶體那就只能上C了@@
01/05 16:01, 15F

01/06 00:24, , 16F
如果搭配nosql db會不會好些?
01/06 00:24, 16F

01/06 03:50, , 17F
redis了吧
01/06 03:50, 17F

01/06 14:53, , 18F
database,前端用 dict 做 cache (幻想中)
01/06 14:53, 18F

01/06 21:44, , 19F
dict就是python的harsh table..就是專門這種case的
01/06 21:44, 19F

01/06 22:40, , 20F
沒學過資結,不過我猜能比hash還好的結構不多了
01/06 22:40, 20F

01/06 23:39, , 21F
試試 sqlite
01/06 23:39, 21F

01/07 11:05, , 22F
trie?
01/07 11:05, 22F
文章代碼(AID): #1GvjcSbz (Python)