Llistar per inicials

Desa les funcions d’aquest exercici al fitxer inicials.py.

  1. Dissenya la funció inicials_1 que a partir d’un text representat per un string, calculi i retorni un diccionari. El diccionari està format per parells on la clau és una lletra i el valor una llista de paraules. La lletra de la clau correspon a la lletra inicial d’una paraula (només minúscules). Al diccionari hi han d’aparèixer totes les lletres inicials de les paraules del text i la llista associada ha d’estar formada per totes les paraules que comencen per la inicial, ordenades alfabèticament i sense repeticions. Al text hi pot haver lletres majúscules i minúscules i les paraules no porten accents; tampoc hi ha signes de puntuació. Per exemple:

    >>> dic = inicials_1('En aquesta frase no hi ha apostrofs pero hi ha repeticions')
    >>> if dic != {'e':['en'], 'a':['apostrofs', 'aquesta'], 'f':['frase'], 'n':['no'],
    ...      'h':['ha', 'hi'], 'p':['pero'], 'r':['repeticions']}:
    ...     print(dic)
    >>> dic = inicials_1('My taylor is rich and my mother is in the kitchen')
    >>> if dic != {'a':['and'], 'i':['in', 'is'], 'k':['kitchen'], 'm':['mother', 'my'],
    ... 'r':['rich'], 't':['taylor', 'the']}:
    ...     print(dic)
    

    Nota

    Podeu descarregar el fitxer amb tests inicials_1.txt.

  2. Dissenyeu la funció inicials_2 com l’anterior però de forma que permeti tractar textos on hi hagi signes de puntuació (punt, coma, punt i coma, dos punts, exclamació i interrogació) i apòstrofs. En aquest cas cal considerar com paraules el que hi ha abans i el que hi ha darrera de l’apòstrof. Per exemple:

>>> dic = inicials_2("Dins la fosca tot d'una, sobre el tronc d'un vell pi, s'enfilava la lluna, com el punt d'una i.")
>>> if dic != {'c': ['com'], 'e': ['el', 'enfilava'], 'd': ['d', 'dins'],
...            'f': ['fosca'], 'i': ['i'], 'l': ['la', 'lluna'],
...            'p': ['pi', 'punt'], 's': ['s', 'sobre'], 'u': ['un', 'una'],
...            't': ['tot', 'tronc'], 'v': ['vell']}:
...     print(dic)
>>> dic = inicials_2("This is Frank's watch and you've broken it.")
>>> if dic != {'t':['this'], 'i':['is', 'it'], 'f':['frank'], 's':['s'],
...            'w':['watch'], 'a':['and'], 'y':['you'], 'v':['ve'],
...            'b':['broken']}:
...     print(dic)

Nota

Podeu descarregar el fitxer amb tests inicials_2.txt.

Solució

Disposeu de solucions al fitxer inicials.py