对于这个迟钝的声音问题感到抱歉,但我正在尝试通过编写脚本来帮助朋友将一些引用替换为正确的格式。 所以我要写的是一个函数(some_func),它将包含一堆数字(字典的键,我将在一秒钟内打印)并返回按日期排序的字符串列表
somefunc(num1, num2, num3,(...))
将导入我的字典(我使用正则表达式填充了一些html到一个漂亮的dict格式)
{'1':'Bauer 等。 (2000年)。 ','2':'G。 M. Kirwan in litt 。 (1999年)。 ','5':'斯科特(1997)。 ','4':'帕切科(1999)。 ','7':'Venturini 等。 (2005年)。 ','6':'Venturini 等。(2002)。 ','8':'P。 Develey in litt。 (2007年,2008年)。 “}
如果给出例如(1,2,7) 将返回['G. M. Kirwan in litt 。 (1999年)。 ','鲍尔等。 (2000年)。 ','Venturini 等。 (2005年)。 “]
我打算使用一些正则表达式来搜索日期字符串,然后按顺序排序,但我觉得有更好的方法。我还需要能够获取未知数量的输入的功能,我稍微不确定如何实现这一点,如果有人想要真正突击这个问题,他们可以告诉我如何在几个月内订购,如果有一个案例的话一年是相同的(想象一下参考文献是'GM Kirwan in litt 。Jan(1999)。'等等。)
感谢您的阅读,对于问题的邋sorry感到抱歉,但数据有点非结构化,我不得不陷入困境,只是为了让它变成这种格式。
答案 0 :(得分:3)
这样的东西?
>>> import re
>>> def get_year(citation):
... citation = citation.strip()
... year = re.search(r"\((\d{4}).*\)\.$", citation).group(1)
... return int(year)
>>> test_list = ['Bauer et al. (2000).', 'G. M. Kirwan in litt. (1999).', 'Pacheco (1999).', 'Scott (1997).', 'Venturini et al.(2002).', 'Venturini et al. (2005).', 'P. Develey in litt. (2007, 2008).']
>>> test_list
['Bauer et al. (2000).', 'G. M. Kirwan in litt. (1999).', 'Pacheco (1999).', 'Scott (1997).', 'Venturini et al. (2002).', 'Venturini et al. (2005).', 'P. Develey in litt. (2007, 2008).']
>>> test_list.sort(key = get_year)
>>> test_list
['Scott (1997).', 'G. M. Kirwan in litt. (1999).', 'Pacheco (1999).', 'Bauer et al. (2000).', 'Venturini et al. (2002).', 'Venturini et al. (2005).', 'P. Develey in litt. (2007, 2008).']
(正则表达的大师,我还有很多需要学习的关于正则表达式,所以如果我的正则表达式很弱,请告诉我。)