先貼示例代碼,方便著急用的朋友:
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']
所以可以把拼音列表連接起來使用。