对中文列表按拼音进行排序有什么好方法

157 views
Skip to first unread message

悟空飞

unread,
Nov 9, 2009, 8:54:13 AM11/9/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
第一次提问,希望知道的前辈指点一下。

Leo Jay

unread,
Nov 9, 2009, 9:01:18 AM11/9/09
to pyth...@googlegroups.com
2009/11/9 悟空飞 <wang...@gmail.com>:
> 第一次提问,希望知道的前辈指点一下。
>

这篇文章有用不:
http://blog.zdnet.com.cn/html/01/421901-2880527.html

--
Best Regards,
Leo Jay

@@

unread,
Nov 9, 2009, 9:04:30 AM11/9/09
to pyth...@googlegroups.com
好像gb系列就是按拼音排序的。转成gb 直接排序就行吧

Leo Jay

unread,
Nov 9, 2009, 9:43:46 AM11/9/09
to pyth...@googlegroups.com
2009/11/9 @@ <ask...@gmail.com>:
> 好像gb系列就是按拼音排序的。转成gb 直接排序就行吧
>

好像只有gb2312是按拼音排序的,到gbk就不是了。

悟空飞

unread,
Nov 9, 2009, 10:07:01 AM11/9/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
是limodev的大作,我正在消化,先谢过。

On 11月9日, 下午10时01分, Leo Jay <python.leo...@gmail.com> wrote:
> 2009/11/9 悟空飞 <wangb...@gmail.com>:

悟空飞

unread,
Nov 9, 2009, 10:17:40 AM11/9/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
进一步有用python实现的就更好了。

悟空飞

unread,
Nov 9, 2009, 10:36:19 PM11/9/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
谢谢。
GB2312确实是按照拼音顺序编码的,在某些应用应该可以满足要求。

引用(GBK维基百科):
由于GB 2312-80只收录了6763个汉字,有不少汉字,如部分在GB 2312-80推出以后才简化的汉字(如“啰”),部分人名用字(如中国
前总理朱镕基的“镕”字),台湾及香港使用的繁体字,日语及朝鲜语汉字等,并未有收录在内。中文电脑开发商,于是利用了GB 2312-80未有使用的
编码空间,收录了所有出现在Unicode 1.1及GB 13000.1-93之中的汉字,制定了GBK编码。

使用GBK基本上可以满足绝大部分中文应用的需求,但是由于它兼容了GB2312,所以在GB2312之后加入的汉字与之前的汉字就不是按照拼音排序
了。

我想在UTF-8的编码方式下按照拼音排序,看来是不是只能建立一个汉字拼音对照表,将汉字转换成拼音,然后再根据拼音进行排序。

Best Regards.

On 11月9日, 下午10时04分, "@@" <ask...@gmail.com> wrote:
> 好像gb系列就是按拼音排序的。转成gb 直接排序就行吧
>

> 2009/11/9 悟空飞 <wangb...@gmail.com>
>
>
>
> > 第一次提问,希望知道的前辈指点一下。

小人物小人物

unread,
Nov 9, 2009, 10:50:58 PM11/9/09
to pyth...@googlegroups.com

def get_cn_first_letter(str):
#print str
   
#print str
str=str.encode("GBK")
#print str
if str<"\xb0\xa1" or str>"\xd7\xf9":
   
return str[:1]
   
   
elif str<"\xb0\xc4":
return "A"
elif str<"\xb2\xc0":
return "B"
elif str<"\xb4\xed":
return "C"
elif str<"\xb6\xe9":
return "D"
elif str<"\xb7\xa1":
return "E"
elif str<"\xb8\xc0":
return "F"
elif str<"\xb9\xfd":
return "G"
elif str<"\xbb\xf6":
return "H"
elif str<"\xbf\xa5":
return "J"
elif str<"\xc0\xab":
return "K"
elif str<"\xc2\xe7":
return "L"
elif str<"\xc4\xc2":
return "M"
elif str<"\xc5\xb5":
return "N"
elif str<"\xc5\xbd":
return "O"
elif str<"\xc6\xd9":
return "P"
elif str<"\xc8\xba":
return "Q"
elif str<"\xc8\xf5":
return "R"
elif str<"\xcb\xf9":
return "S"
elif str<"\xcd\xd9":
return "T"
elif str<"\xce\xf3":
return "W"
elif str<"\xd1\x88":
return "X"
elif str<"\xd4\xd0":
return "Y"
elif str<"\xd7\xf9":
return "Z"

看对你有帮助不

2009/11/10 悟空飞 <wang...@gmail.com>

Chen GUO

unread,
Nov 10, 2009, 12:11:55 AM11/10/09
to pyth...@googlegroups.com
UTF系列分一二级汉字,前半截是拼音,后半截是部首笔画,所以不能直接排
这个在我们做I18N/L10N的来看,都是常识

Abraham

unread,
Aug 26, 2014, 12:07:23 AM8/26/14
to pyth...@googlegroups.com, wang...@gmail.com


在 2009年11月9日星期一UTC+8下午9时54分13秒,悟空飞写道:
第一次提问,希望知道的前辈指点一下。

>>> a=['你','是','我','的','小','呀','小','苹','果']
>>> def yo(n):
return n.encode('GBK')

>>> sorted(a,key=yo)
['的', '果', '你', '苹', '是', '我', '小', '小', '呀']

 

yegle

unread,
Aug 26, 2014, 12:23:34 AM8/26/14
to pyth...@googlegroups.com, wang...@gmail.com

2009年的提问…

--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了Google网上论坛中的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到python-cn+...@googlegroups.com
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/python-cn/5a65a384-99a3-4c58-8dab-3e2649641c32%40googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout

Catstyle Lee

unread,
Aug 26, 2014, 12:29:43 AM8/26/14
to pyth...@googlegroups.com
能想到的也就是
def yo(n):
return get_pinyin(n)
>> <https://groups.google.com/d/msgid/python-cn/5a65a384-99a3-4c58-8dab-3e2649641c32%40googlegroups.com?utm_medium=email&utm_source=footer>
>> 。
>> 要查看更多选项,请访问https://groups.google.com/d/optout
>>
>
> --
> --
> 邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 发言: pyth...@googlegroups.com
> 详情: http://code.google.com/p/cpyug/wiki/CpyUg
> G+: https://plus.google.com/u/0/communities/108786798869709602787
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> ---
> 您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
> 要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到python-cn+...@googlegroups.com
> 要在网络上查看此讨论,请访问
> https://groups.google.com/d/msgid/python-cn/CAFL5w3W0o3DhpJ3hYXAh32z8YPmPdKEUtyHrqfprmcvXLB%3DnBA%40mail.gmail.com
> 要查看更多选项,请访问 https://groups.google.com/d/optout
>


--
BR,
/Catstyle_Lee

依云

unread,
Aug 26, 2014, 10:45:45 AM8/26/14
to pyth...@googlegroups.com
On Mon, Aug 25, 2014 at 09:07:23PM -0700, Abraham wrote:
> >>> a=['你','是','我','的','小','呀','小','苹','果']
> >>> def yo(n):
> return n.encode('GBK')
>
> >>> sorted(a,key=yo)
> ['的', '果', '你', '苹', '是', '我', '小', '小', '呀']

>>> import locale
>>> locale.setlocale(locale.LC_COLLATE, 'zh_CN.UTF-8')
'zh_CN.UTF-8'
>>> from functools import cmp_to_key
>>> sorted(['你','是','我','的','小','呀','小','苹','果'], key=cmp_to_key(locale.strcoll))
['的', '果', '你', '苹', '是', '我', '小', '小', '呀']

用 GBK 小心出现 UnicodeEncodeError,比如 &nbsp;(U+00A0)就不在 GBK 范围内。

--
Best regards,
lilydjwg

Linux Vim Python 我的博客:
http://lilydjwg.is-programmer.com/
--
A: Because it obfuscates the reading.
Q: Why is top posting so bad?

Catstyle Lee

unread,
Aug 26, 2014, 11:02:41 AM8/26/14
to pyth...@googlegroups.com
赞,想不到内置的也可以


--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到python-cn+...@googlegroups.com
要在网络上查看此讨论,请访问 https://groups.google.com/d/msgid/python-cn/20140826144450.GA32028%40lilyforest
要查看更多选项,请访问 https://groups.google.com/d/optout



--
BR,
/Catstyle_Lee
Reply all
Reply to author
Forward
0 new messages