【Python】对中文排序

本文介绍了两种汉字排序的方法:一种是利用Python的pypinyin库将汉字转换为拼音后进行排序;另一种是在MySQL中使用CONVERT函数指定编码方式实现中文排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、python 排序

汉字排序是按照unicode数值排序

ord() 函数是 chr() 函数(对于 8 位的 ASCII 字符串)的配对函数,它以一个字符串(Unicode 字符)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值。

解决方案,使用汉字转拼音库pypinyin ,得到拼音及音调

from itertools import chain
from pypinyin import pinyin, Style


def to_pinyin(s):
    return ''.join(chain.from_iterable(pinyin(s, style=Style.TONE3)))
print(sorted(char))  
print(sorted(char, key=to_pinyin))  

# ['佘', '孙', '李', '赵', '钱']
# ['李', '钱', '佘', '孙', '赵']

二、用mysql进行排序

在查询语句的 order by 部分使用 CONVERT 函数。

比如 select * from mytable order by CONVERT(chineseColumnName USING gbk);

UTF8 默认校对集是 utf8_general_ci , 它不是按照中文来的。你需要强制让MySQL按中文来排序。

下面给出一个例子:

按中文排序前:
在这里插入图片描述

按custName字段进行升序排列:

SELECT * FROM t_customer ORDER BY CONVERT(custName USING gbk) ASC

在这里插入图片描述

按custName字段进行降序排列:

SELECT * FROM t_customer ORDER BY CONVERT(custName USING gbk) DESC
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云中鲸

谢赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值