Python实现获取汉字笔画数,根据汉字笔画数量排序

您所在的位置:网站首页 字形编码怎么算 Python实现获取汉字笔画数,根据汉字笔画数量排序

Python实现获取汉字笔画数,根据汉字笔画数量排序

2023-09-07 05:36| 来源: 网络整理| 查看: 265

起因

本人现在所在的公司是由香港人开办的,也是做做香港业务,一个车辆管理系统后台,也包括司机等人员管理。突然有一天,老板说我们的列表找司机不够人性化,不符合用户习惯。因为我们Python对中文排序默认是按照Unicode编码来排序的,很正常嘛,一般都喜欢希望按照拼音来排序。然后我就惊呆了:香港人不会拼音… 那按照五笔排序?也不是,他们要按照汉字的笔画数量排序,笔画少的,排在前面。

额…(靓仔语塞.jpg)

不过既然老板需要,那还是要搞起来的

如果不是做香港业务,我可能永远也不会想到中文排序除了【按照拼音排序】,【按五笔排序】之外,还有什么什么排序。

香港人打字不用拼音,他们用仓颉输入法

实现 思路

首先百度了一大圈,即使强如Python,也没有现成可用的第三方库可用,不过有些思路和代码片段,但是都不怎么完善,需要自己实现。

首先要找一个文件,包含所有汉字,并且有每个汉字对应的笔画数,然后构造成一个字典,字典的键是汉字,值是对应的笔画数。之后计算汉字的笔画数时,就到字典中去取就可以了。

最难找的就是找个汉字对照表文件了,找到了下载还有层层限制,要各种下载币

代码实现

所需用到的字典文件放到gitlab中了,有需要的可自行下载

汉字对照表地址:https://github.com/WuChengqian520/codeSnippet.git

汉字对照表

代码如下:

from typing import Iterable, Callable, Union # 加载汉字笔画对照文件,参考同级目录下的 chinese_unicode_table.txt 文件格式 chinese_char_map = {} with open('./chinese_unicode_table.txt', 'r', encoding='UTF-8') as f: lines = f.readlines() for line in lines[6:]: # 前6行是表头,去掉 line_info = line.strip().split() # 处理后的数组第一个是文字,第7个是笔画数量 chinese_char_map[line_info[0]] = line_info[6] def __sort_by_strokes_core(words: Iterable) -> int: """ 统计字符串中所有文字的笔画总数 :param words: 需要统计的字符串 :return: 笔画总数 """ strokes = 0 for word in words: if 0 'name': '王梓涵', 'sex': '男', 'age': 12, 'grade': 60}, {'name': '周小静', 'sex': '女', 'age': 13, 'grade': 99}, {'name': '张靓颖', 'sex': '女', 'age': 11, 'grade': 80}, {'name': '欧阳晓晓', 'sex': '女', 'age': 14, 'grade': 67}, {'name': '东方不败', 'sex': '男', 'age': 13, 'grade': 72}, {'name': '周一天', 'sex': '男', 'age': 15, 'grade': 72}, {'name': '♂卐', 'sex': '男', 'age': 13, 'grade': 72}, ] print('字典排序:', sort_by_strokes(students, key=lambda x: x['name']))

排序示例:

普通排序: ['王五', '尼古拉丁', '张三', '李四', '周吴郑王', '赵六'] 倒序排序: ['赵六', '周吴郑王', '李四', '张三', '尼古拉丁', '王五'] 按照笔画总数排序: ['王五', '张三', '李四', '赵六', '尼古拉丁', '周吴郑王'] 字典排序: [{'name': '王梓涵', 'sex': '男', 'age': 12, 'grade': 60}, {'name': '东方不败', 'sex': '男', 'age': 13, 'grade': 72}, {'name': '张靓颖', 'sex': '女', 'age': 11, 'grade': 80}, {'name': '周一天', 'sex': '男', 'age': 15, 'grade': 72}, {'name': '周小静', 'sex': '女', 'age': 13, 'grade': 99}, {'name': '欧阳晓晓', 'sex': '女', 'age': 14, 'grade': 67}, {'name': '♂卐', 'sex': '男', 'age': 13, 'grade': 72}] 最后,打个小广告

欢迎各位访问我的博客:foryou.cool



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3