Biblioteca

Un fitxer de text conté la informació de les novetats que s’han rebut a la biblioteca. En el fitxer hi ha una seqüència de llibre. Per cada llibre hi ha quatre etiquetes: “autor:”, “titol:”, “llengua:” i “editorial:”. Després de cada etiqueta hi ha la informació corresponent. Per exemple, la informació d’una obra podria ser:

autor: Albert Sánchez Piñol titol: La pell freda llengua: català editorial: La Campana

En el fitxer hi ha una obra per línia. Suposeu que les etiquetes no poden aparèixer en el títol de les obres. Per exemple, hi pot haver un llibre que es tituli: “A la recerca d’un personatge”, però no una que es tituli: “Busca un autor:”. El contingut d’un fitxer podria ser:

autor: Regina Rodriguez Sirvent titol: Les calces al sol llengua: català editorial: La Campana
autor: Joan-Lluís Lluís titol: Junil a les terres dels bàrbars llengua: català editorial: Club Editor
autor: Irene Solà titol: Canto jo i la muntanya balla llengua: català editorial: Anagrama
autor: Dolly Alderton titol: Everything I know about love llengua: anglès editorial: DK
autor: Joan-Lluís Lluís titol: Ulls de sorra llengua: català editorial: Club Editor
autor: Maria Climent titol: A casa teníem un himme llengua: català editorial: L'altra Editorial
autor: Sally Rooney titol: Normal People llengua: anglès editorial: Faber and faber
autor: Marta Marin-Dòminique titol: Diré que m'ho he inventat llengua: català editorial: Edicions 62
autor: Gustave Flaubert titol: Madame Bovary llengua: francès editorial: Hauteville
autor: Sergi Pamies titol: A les dues seran les tres llengua: català editorial: Quaderns Crema
autor: Eric Chacour titol: Ce que je sais de toi llengua: francès editorial: Alto
autor: Alice Hoffman titol: The invisible hour llengua: anglès editorial: Simon and Schuster

Pots descarregar aquest fitxer com exemple: novetats.txt

Dissenyeu una funció anomenada novetats que a partir del nom d’un fitxer d’aquestes característiques, calculi i retorni un diccionari que tingui com a claus strings que corresponen a una llengua i com a valor una llista de tuples. Cada tupla contindrà dos strings: l’autor de l’obra i el títol d’aquesta. Les llistes associades a cada llengua estaran ordenades alfabèticament segons el nom de l’autor i en cas del mateix autor, pel títol de l’obra. Pel fitxer de l’exemple, la funció hauria de retornar:

>>> d= novetats('novetats.txt')
>>> if d!=  {'català': [('Irene Solà', 'Canto jo i la muntanya balla'),
... ('Joan-Lluís Lluís', 'Junil a les terres dels bàrbars'), ('Joan-Lluís Lluís', 'Ulls de sorra'),
... ('Maria Climent', 'A casa teníem un himme'), ('Marta Marin-Dòminique', "Diré que m'ho he inventat"),
... ('Regina Rodriguez Sirvent', 'Les calces al sol'), ('Sergi Pamies', 'A les dues seran les tres')],
... 'anglès': [('Alice Hoffman', 'The invisible hour'), ('Dolly Alderton', 'Everything I know about love'),
... ('Sally Rooney', 'Normal People')],
... 'francès': [('Eric Chacour', 'Ce que je sais de toi'), ('Gustave Flaubert', 'Madame Bovary')]}:
...    print (d)

Desa la funció al fitxer biblioteca.py. Pots descarregar un joc de proves a test-biblioteca.txt. Pots descarregar una solució a biblioteca.py.