【问题标题】:How do I sort a dictionary of results into a list of strings by date order of part of the strings (in python)如何按部分字符串的日期顺序将结果字典排序为字符串列表(在python中)
【发布时间】:2012-03-29 07:55:16
【问题描述】:

很抱歉这个听起来很迟钝的问题,但我正在尝试通过编写脚本将一些引用替换为正确的格式来帮助一位朋友。 所以我要写的是一个函数(some_func),它将接收一堆数字(我将在一秒钟内打印的字典的键)并返回按日期排序的字符串列表

somefunc(num1, num2, num3,(...))

将导入我的字典(我通过使用正则表达式将一些 html 提升为一个不错的字典格式来填充它)

{'1': '鲍尔。 (2000 年)。 ','2':'G. M. Kirwan 在 litt。 (1999)。 ','5':'斯科特(1997 年)。 ','4':'帕切科(1999)。 ', '7': '文丘里尼。 (2005 年)。 ', '6': '文图里尼 等人 (2002)。 ','8':'P.德维利 in litt。 (2007 年,2008 年)。 '}

如果给出例如 (1,2,7) 将返回 ['G. M. Kirwan 在 litt。 (1999)。 ', ' 鲍尔等人。 (2000 年)。 ', ' 文丘里尼。 (2005 年)。 ']

我计划使用一些正则表达式来搜索日期字符串,然后像这样对它们进行排序,但我觉得有更好的方法。我还需要该功能能够接受未知数量的输入,并且我有点不确定如何实现这一点,如果有人想真正提出这个问题,他们可以告诉我如何按月订购,如果有年份相同(想象一下引用的形式是“G. M. Kirwan in litt. Jan (1999). 等)

感谢您的阅读,很抱歉这个问题的草率,但数据有些非结构化,为了将其转换为这种格式,我不得不搞砸了一些。

【问题讨论】:

  • 抱歉,只是做了更多的工作,并意识到它可以很容易地归结为对字符串列表进行排序,我假设我可以在使用正则表达式查找日期并像这样对它们进行排序时做到这一点,仍然不知道怎么做。

标签: python date dictionary


【解决方案1】:

这样的?

>>> 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).']

(正则表达式大师,在正则表达式方面我还有很多东西要学,所以如果我的正则表达式很弱,请告诉我)。

【讨论】:

  • 请使用test_list.sort(key=get_year)
  • re.search(r"\((\d{4})\D", s).group(1) - 也许只匹配 4 位数的年份?
  • 哈哈没想到只用get_year。谢谢你的提示。仅匹配 4 位数字也有意义。
猜你喜欢
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
相关资源
最近更新 更多