2. Estacions de metro (3 punts)

Disposem d’un diccionari amb informació sobre les línies i estacions del metro de Barcelona. La clau d’aquest (dict) és el número de línia (int) i el valor és una llista amb les estacions d’aquella línia posades en l’ordre en què es recorren.

Per exemple (òbviament és una simplificació de la realitat):

{1: ['espanya', 'hostafracs', 'p.sants'],
 3: ['espanya', 'tarragona', 'sants', 'p.centre'],
 5: ['sants', 'p.sants', 'badal']}

Es vol generar un diccionari d’estacions veïnes que per cada estació ens indiqui quines són les seves estacions veïnes tenint en compte totes les línies. Un diccionari d’estacions veïnes té per claus les estacions (str) i el valor de cada clau és una llista de tuples amb el nom i la línia de cada una de les seves estacions veïnes.

Per exemple, a partir del diccionari de l’exemple anterior:

{'badal': [('p.sants', 5)],
 'espanya': [('hostafracs', 1), ('tarragona', 3)],
 'hostafracs': [('espanya', 1), ('p.sants', 1)],
 'p.centre': [('sants', 3)],
 'p.sants': [('badal', 5), ('hostafracs', 1), ('sants', 5)],
 'sants': [('p.centre', 3), ('p.sants', 5), ('tarragona', 3)],
 'tarragona': [('espanya', 3), ('sants', 3)]}

Observa, per exemple, que les estacions veïnes de Plaça de Sants ('p.sants') són Badal ('badal') i Sants ('sants') per la línia 5, i Hostafrancs ('hostafrancs') per la línia 1.

Amb aquest objectiu, es demana que al mòdul metro (fitxer metro.py) facis les funcions següents:

metro.actualitza_evD(evD, ln, estL)

Afegeix al diccionari d’estacions veïnes evD les estacions de la línia ln que hi ha a la llista estL.

La llista estL conté tres estacions com a mínim.

Aquesta funció modifica evD.

Per exemple:


>>> ev = {}
>>> actualitza_evD(ev, 1, ['espanya', 'hostafrancs', 'p.sants'])
>>> for l in ev.values(): l.sort()
>>> ev == {
... 'p.sants': [('hostafrancs', 1)],
... 'espanya': [('hostafrancs', 1)],
... 'hostafrancs': [('espanya', 1), ('p.sants', 1)]}
True

Trobaràs més tests al fitxer test-actualitza_evD.txt


metro.genera_evD(d)

tal que

donat d un diccionari amb les línies de metro com el descrit

retorna un diccionari d’estacions veïnes que conté totes les

estacions que apareixen a les línies de d.

Per exemple:


>>> d = {
... 1: ['espanya', 'hostafracs', 'p.sants'],
... 3: ['espanya', 'tarragona', 'sants', 'p.centre'],
... 5: ['sants', 'p.sants', 'badal']
... }
>>> dsol = genera_evD(d)
>>> for l in dsol.values(): l.sort()
>>> dsol ==  {
... 'sants': [('p.centre', 3), ('p.sants', 5), ('tarragona', 3)],
... 'p.sants': [('badal', 5), ('hostafracs', 1), ('sants', 5)],
... 'badal': [('p.sants', 5)],
... 'espanya': [('hostafracs', 1), ('tarragona', 3)],
... 'tarragona': [('espanya', 3), ('sants', 3)],
... 'p.centre': [('sants', 3)],
... 'hostafracs': [('espanya', 1), ('p.sants', 1)]}
True

Disposes dels jocs de proves al fitxer test-genera_evD.txt.