Как отсортировать словарь результатов в список строк по порядку даты части строк (в Python) - PullRequest
0 голосов
/ 29 марта 2012

извините за тупой вопрос, но я пытаюсь помочь другу, написав скрипт для подстановки некоторых ссылок в правильный формат. поэтому я напишу функцию (some_func), которая будет принимать набор чисел (ключи к словарю, которые я распечатаю за секунду) и возвращать список строк, упорядоченных по дате

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

импортирует мой словарь (который я заполнил с помощью регулярных выражений, чтобы поднять немного html в хороший формат dict)

{'1': 'Бауэр и др. . (2000). ',' 2 ':' Г. М. Кирван в литах . (1999). ',' 5 ':' Скотт (1997). ',' 4 ':' Pacheco (1999). ',' 7 ':' Вентурини и др. . (2005). ',' 6 ':' Venturini и др. (2002). ',' 8 ':' П. Девели в лит. (2007, 2008). }

и если дано например (1,2,7) вернется ['Г. М. Кирван в литах . (1999). ',' Бауэр и др. . (2000). ',' Вентурини и др. . (2005). «]

Я планировал использовать некоторые регулярные выражения для поиска строки даты, а затем упорядочить их таким образом, но я чувствую, что есть лучший способ. Мне также нужна функция, чтобы иметь возможность принимать неизвестное количество входных данных, и я немного не уверен в том, как этого добиться, если кто-то захочет по-настоящему заморозить этот вопрос, он может сказать мне, как сделать заказ по месяцам, если был случай год был тем же самым (представьте, что ссылки имели вид «GM Kirwan » в буквальном смысле . Jan (1999). 'и т. д.)

Спасибо за чтение, извините за неряшливость вопроса, но данные несколько не структурированы, и мне пришлось немного возиться, чтобы перевести его в этот формат.

1 Ответ

3 голосов
/ 29 марта 2012

Как то так?

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

(Мастера регулярных выражений, мне еще многое предстоит узнать, когда дело доходит до регулярных выражений, поэтому, пожалуйста, дайте мне знать, если мое регулярное выражение слабое).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...