Re: [問題] 有關dict的中文的排序問題
※ 引述《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
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章