2012-03-28 4 views
0

Sorry für die stumpf klingende Frage, aber ich versuche, einen Freund zu helfen, indem Sie ein Skript zu ersetzen einige Referenzen in ein korrektes Format. so, was ich schreibe, ist eine Funktion (some_func), die in einer Reihe von Zahlen (die Schlüssel in das Wörterbuch, das ich in einem zweiten gedruckt werde) nehmen und eine Liste von den Saiten nach Datum geordnetWie sortiere ich ein Wörterbuch von Ergebnissen in eine Liste von Strings nach Datum Reihenfolge eines Teils der Strings (in Python)

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

wird mein Wörterbuch importieren (die ich mithilfe von regulären Ausdrücken bevölkert haben einige html in ein schönes dict Format heben)

{ '1': 'Bauer et al. (2000). ',' 2 ':' G. M. Kirwan in litt. (1999). ',' 5 ': Scott (1997). "," 4 ":" Pacheco (1999). ',' 7 ':' Venturini und andere. (2005). ',' 6 ':' Venturini et al. (2002). ',' 8 ':' P. Develey in litt. (2007, 2008). '}

und wenn zum Beispiel gegeben (1,2,7) wird zurückgegeben [' G. M. Kirwan in litt. (1999). ',' Bauer et al. (2000). ',' Venturini und andere. (2005). ']

Ich plante, einige Regexes zu verwenden, um nach einer Datumszeichenkette zu suchen und sie dann so zu bestellen, aber ich denke, dass es einen besseren Weg gibt. Ich brauche auch die Funktion, um eine unbekannte Anzahl von Eingaben zu nehmen, und ich bin etwas unsicher, wie das zu erreichen ist, wenn jemand wirklich diese Frage blitzen will, könnten sie mir sagen, wie man Monate bestellt, wenn es einen Fall des im selben Jahr sein (man stelle sich die Referenzen der Form waren ‚GM Kirwan in LITT. Jan (1999).‘ etc.)

Danke fürs Lesen, sorry über die Schlampigkeit der Frage, aber die Daten etwas unstrukturiert und Ich musste ein bisschen herumspielen, nur um es in dieses Format zu bekommen.

+0

Tut mir leid, ich habe gerade ein wenig mehr Arbeit gemacht und festgestellt, dass es leicht zu einer Liste der Strings führen kann. Ich gehe davon aus, dass ich die Regexes verwenden kann, um die Daten zu finden und immer noch nicht sicher zu sein mach es aber. –

Antwort

3

So ähnlich?

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

(Regex Meister, ich habe noch viel zu lernen, wenn es so Regexes kommt lass es mich wissen, wenn mein regex schwach ist).

+2

Bitte verwenden Sie 'test_list.sort (key = get_year)' –

+0

're.search (r" \ ((\ d {4}) \ D ", s) .group (1)' - um nur 4 stellige Jahre zu erreichen vielleicht? –

+0

Haha hat nicht einmal daran gedacht, nur get_year zu verwenden, danke für den Tipp, das passt nur zu 4 Ziffern. –

Verwandte Themen