作者fcamel (飞啊!啊哈的小骆驼!!)
看板Python
标题Re: [问题] 有关dict的中文的排序问题
时间Fri Jul 17 23:09:21 2009
※ 引述《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