先贴示例代码,方便着急用的朋友:
from pypinyin import lazy_pinyin as py
raw = [ "赌场", "大班", "abc", "军史", "大阪", "赌博", "bbc", "经营", "独播", "精英", "军事" ]
ordered = sorted(raw, key=lambda e: ''.join(py(e)))
for z in zip(raw, ordered):
print(z)
输出:
('赌场', 'abc')
('大班', 'bbc')
('abc', '大班')
('军史', '大阪')
('大阪', '赌博')
('赌博', '独播')
('bbc', '赌场')
('经营', '经营')
('独播', '精英')
('精英', '军史')
('军事', '军事')
再说说关键的地方,方便想改动自用的朋友。示例代码中最关键部分如下:
sorted(raw, key=lambda e: ''.join(py(e)))
首先sorted函数的key指定了排序时的取值,也就是说sorted算法对raw列表元素做比较时实际使用的是key对应函数的结果,这样在排序raw时实际是比较的其元素的pinyin输出。
再说key,其对应一个函数,可以是lambda,也可以是其他函数,如果排序的是对象,也可以在此调用对象的函数,这样就可以对对象列表进行自定义的偏序排序了。
最后是py的输出,此函数返回输入字符串的拼音列表,例如:
>>> py('abc')
['abc']
>>> py('赌场')
['du', 'chang']
所以可以把拼音列表连接起来使用。