今天偶然做一个问题的时候想要对一组数据的进行排序,然后里面有中文的 一二三四,排序出来的结果不是我想要的结果。然后我就比较了七和二的大小,发现七居然比二小下面这张图是一到七排序后的结果
我知道导致这个结果的原因是因为编码的不同。但是如果我想知道如何对中文的数字进行排序呐?
python3
>>> import enum >>> class CN(enum.IntEnum): 〇,一,二,三,四,五,六,七,八,九,十 = range(11) >>> CN.七 > CN.一 True >>> for i in CN: print(i, i.value) CN.〇 0 CN.一 1 CN.二 2 CN.三 3 CN.四 4 CN.五 5 CN.六 6 CN.七 7 CN.八 8 CN.九 9 CN.十 10 >>> 玖 = '九' >>> CN[玖].value 9 >>>
>>> n = ['一', '三', '十', '二', '五', '九', '〇', '六', '四', '七', '八', '二'] >>> sorted(n,key=lambda x:CN[x]) ['〇', '一', '二', '二', '三', '四', '五', '六', '七', '八', '九', '十']
将中文和数字做个映射然后比较dic={'一':1,'二':2,'三':3,'四':4}
dic={'一':1,'二':2,'三':3,'四':4}
中文一般按照拼音和笔画排序。需要建立一张中文和拼音或笔画数的mapping表,然后通过对应的拼音或者笔画来作比较。
如果题主这里的需求只是比较“一,二,三,四,五,六,七,八,九,十”的话。可以建立一张如下的对照表:
一 -> 1 二 -> 2 三 -> 3 四 -> 4 …… 十 -> 10
然后利用对照值来作排序就很简单了。
python3
将中文和数字做个映射然后比较
dic={'一':1,'二':2,'三':3,'四':4}
中文一般按照拼音和笔画排序。
需要建立一张中文和拼音或笔画数的mapping表,然后通过对应的拼音或者笔画来作比较。
如果题主这里的需求只是比较“一,二,三,四,五,六,七,八,九,十”的话。
可以建立一张如下的对照表:
然后利用对照值来作排序就很简单了。