2014-11-15 47 views
1

我正在嘗試管理我的論文的引用和參考。我編寫了一個自動生成參考列表的程序,但我試圖找到一個巧妙的方法來對它進行排序。關於使用Unicode的數組字典的複數子集

字典產生的樣子:

ref_list={ 
'ref_id_1': ['2009', 'AAUTHOR, FIRSTNAME;ZAUTHOR, FIRSTNAME'], 
'ref_id_2': ['2014', 'BAUTHOR, FIRSTNAME'], 
'ref_id_3': ['2012a', 'FAUTHOR, FIRSTNAME'], 
'ref_id_4': ['2012c', 'ĞAUTHOR, FIRSTNAME;YAUTHOR, FIRSTNAME'], 
'ref_id_5': ['2012b', 'ØAUTHOR, FIRSTNAME'], 
'ref_id_6': ['1993', 'CAUTHOR, FIRSTNAME;XAUTHOR, FIRSTNAME;WAUTHOR, FIRSTNAME'], 
'ref_id_7': ['1983', 'ÂAUTHOR, FIRSTNAME'], 
'ref_id_8': ['2005', 'GAUTHOR, FIRSTNAME'] 
} 

,並且需要通過筆者首先排序,然後按年份。在我使用的是好的,但在Unicode字符最終在列表的末尾,而不是之後A和G G.

即將到來的分...

a=sorted(list(ref_list.items()), key=lambda x: x[1][0]) 
sorted_ref_list=sorted(a, key=lambda x: x[1][1]) 

有關如何將語言環境排序引入到此的任何建議?

謝謝。

回答

0

你試圖實現的是所謂的collation:有一種標準的方法來將unicode字符串轉換爲可用作排序鍵的規範化字符串。

import locale 

locale.setlocale(locale.LC_ALL, "") 
a=sorted(list(ref_list.items()), key=lambda x: locale.strxfrm(x[1][0])) 
sorted_ref_list=sorted(a, key=lambda x: locale.strxfrm(x[1][1])) 

其中locale.strxfrm功能將根據locale.setlocale設置區域設置整理字符串:在Python這可以通過使用locale模塊來實現。

+0

你是超級英雄。完美的作品。謝謝! – Richie