Re: [問題] 有關dict的中文的排序問題

看板Python作者 (飛啊!啊哈的小駱駝!!)時間16年前 (2009/07/17 23:09), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《hazton (hazton)》之銘言: : ※ 引述《hazton (hazton)》之銘言: : : # -*- coding: utf-8 -*- : : keyword={'筆':1} : : keyword.setdefault('鉛筆',1000) : : keyword.setdefault('鋼筆',200) : : print sorted(keyword.items(), key=lambda d:d[1]) : : 以上程式是我想讓最後輸出的結果排序依照1,200,1000輸出 : : 也就是 : : 筆:1 : : 鋼筆:200 : : 鉛筆:1000 : : 不過用以上的sorted時中文總是一堆亂碼,請問有方法可以改善這情形嘛? : 自己回自己~ : 目前改了這個寫法可以解決這個問題 : # -*- coding: utf-8 -*- : keyword={'筆':1} : keyword.setdefault('鉛筆',1000) : keyword.setdefault('鋼筆',200) 建議使用 u'筆', 或是讀入 utf-8 文字後, 先轉為 Unicode 再做操作, 例如 lines = open('some-file-in-utf8.txt').readlines() lines = [s.decode('utf8') for s in lines] utf-8 和 Unicode 不同, Python 和字串相關的函式可以正確處理 Unicode, 但不能正確處理 utf-8 可以比較看看 print len(u'筆') print len('筆') : li = sorted(keyword.items(), key=lambda d:d[1]) li = sorted(keyword.items(), key=operator.itemgetter(1)) 這樣寫會比較快, 因為內建函式用 C 實作, module operator 裡有很多好東西, 可以幫我們減少用 lambda : length=len(li) : for i in range(length): #相當於for i=0,1,2 由小到大輸出 : print li[i][0],li[i][1] for key, value in li: print key, value 盡量少用 C style 的 for-loop, 多用 iterator (for-each) 的寫法, 會比較清楚 一些個人經驗, 希望有幫助 :) : [ deleted ] -- fcamel / chlo's Blog - 自強不息的駱駝有草吃 http://fcamel.twbbs.org/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.223.188
文章代碼(AID): #1AO9GaPc (Python)
文章代碼(AID): #1AO9GaPc (Python)