python 汉字按拼音排序,
原理很简单,就是根据汉字拼音字典,将汉字转为拼音,然后sort一下就好了,不过对于多音字倒是没有办法了。
#encoding:utf-8
import re
def sort_pinyin (names):
'''pinyin.txt:
吖 a1
阿 a1
啊 a1
锕 a1
錒 a1
嗄 a2
厑 aes
'''
pinyin = file('pinyin.txt').read().decode('utf-8').split('\n')
pinyin_dict = {}
for line in pinyin:
if not line.strip():
continue
tmp = line.split('\t')
pinyin_dict[tmp[0].strip()] = re.sub(r'\d*','',tmp[1].strip())
names_sort = sorted (names, key=lambda x:''.join([pinyin_dict.get(i) for i in x]))
return names_sort
if __name__ == "__main__":
x = u'广州, 深圳, 北京, 长沙, 上海, 武汉, 成都, 南京, 重庆, 济南, 南宁, 西安, 天津, 合肥, 东莞, 厦门, 昆明, 岳阳, 海口, 长春, 徐州, 德阳, 南昌, 沈阳, 太原, 兰州, 太仓, 杭州, 芜湖, 佛山, 肇庆, 福州, 安顺, 大连, 扬州, 北海, 乌鲁木齐, 青岛, 贵阳'
x = x.split(', ')
x2 = sort_pinyin(x)
for i in x:
print i,
print '\n------------'
for i in x2:
print i,
'''oupput
安顺 北海 北京 长春 长沙 成都 大连 德阳 东莞 佛山 福州 广州 贵阳 海口 杭州 合肥
济南 昆明 兰州 南昌 南京 南宁 青岛 厦门 上海 深圳 沈阳 太仓 太原 天津 乌鲁木齐
芜湖 武汉 西安 徐州 扬州 岳阳 肇庆 重庆
'''