Python 中文排序
来源:互联网 发布:java一定要去培训班吗 编辑:程序博客网 时间:2024/06/06 13:18
最近项目需要对一些条目进行排序,这些条目都是汉字词组,使用Python传统的.sort,或sorted都失败了,原因很简单,汉字编码和字母编码根本就不是一回事,汉字的编码顺序并非按照拼音和笔画顺序大小排序。因此在排序时需要借助拼音编码对照表和笔画对照表。
基本原理
假设输入为汉字字符串数组,还是按照最简单的排序原理。这里的的大小依据是就是拼音对照表中的编码值和笔画对照表中的编码值。先按拼音比较,如果拼音编码值相等,则比较其笔画编码。对于两个多汉字单词的比较,先比较首单词,若相同在比较第二个单词,以此类推。
直接上代码,附注释
# coding: utf-8 # 建立拼音辞典dic_py = dict()with open('./py.txt','r',encoding = 'utf8') as f: content_py = f.readlines() for i in content_py: i = i.strip() word_py, mean_py= i.split('\t') dic_py[word_py]=mean_py# 建立笔画辞典dic_bh = dict()with open('./bh.txt','r',encoding = 'utf8') as f: content_bh = f.readlines() for i in content_bh: i = i.strip() word_bh, mean_bh = i.split('\t') dic_bh[word_bh]=mean_bh################################ 辞典查找函数def searchdict(dic,uchar): # 一 齚 if u'\u4e00' <= uchar <=u'\u9fa5': value=dic.get(uchar) if value == None: value = '*' else: value = uchar return value#比较单个字符def comp_char_PY(A,B): if A==B: return -1 pyA=searchdict(dic_py,A) pyB=searchdict(dic_py,B) # 比较拼音 if pyA > pyB: return 1 elif pyA < pyB: return 0 # 比较笔画 else: bhA=eval(searchdict(dic_bh,A)) bhB=eval(searchdict(dic_bh,B)) if bhA > bhB: return 1 elif bhA < bhB: return 0 else: return "拼音相同,笔画也相同?"#比较字符串def comp_char(A,B): n=min(len(A),len(B)) i=0 while i < n: dd=comp_char_PY(A[i],B[i]) # 如果第一个单词相等,就继续比较下一个单词 if dd == -1: i=i+1 # 如果比较到头了 if i==n: dd=len(A)>len(B) else: break return dd# 排序函数def cnsort(nline): n = len(nline) lines="\n".join(nline) for i in range(1, n): # 插入法 tmp = nline[i] j = i while j > 0 and comp_char(nline[j-1],tmp): nline[j] = nline[j-1] j -= 1 nline[j] = tmp return nlinechar=['衣','食','住','行','诗','酒','茶']char = sorted(char)print ('输入:',char)char=cnsort(char)print ('输出:',char)
结果:
阅读全文
0 0
- [转]Python中文排序
- Python中文排序
- Python 中文排序
- python 按中文排序
- python中文按拼音排序
- 中文排序
- 中文排序
- 中文排序
- 中文排序
- 中文排序
- 中文排序
- 中文排序
- 中文排序
- 中文排序
- 中文排序
- PYTHON 中文
- Python中文
- Python 中文
- Tensorflow-2: 迁移学习程序编写
- 新开的博客
- sqrt函数实现-二叉搜索
- @Version
- MongoDB常用命令汇总之语句块操作。
- Python 中文排序
- centos 安装VSCODE 的经历
- 设计模式(二十二)command
- 19、android 自定义虚线
- Python学习整理之输入输出input(),print()
- react前端+node后台+mongoose+express框架搭建
- Win10下安装卸载Ubuntu16.04双系统的方法
- cnn补充材料
- fgm实例练习笔记-2.11鼠标移过改变图片路径