Aimer et être aimé

Sur le réseau social Immediam, des utilisateurs peuvent s'abonner au compte d'autres utilisateurs. Si l'utilisateur A s'abonne au compte de B, on dit que A « suit » B.

Ces relations sont schématisées ci-dessous. Dans cette représentation, une flèche allant d'un sommet Α vers un sommet B indique que l'utilisateur A « suit » l'utilisateur B.

flowchart LR
    A([Anna]) --> B([Billy])
    B --> A
    B --> E([Eroll])
    C([Carl]) --> B
    D([Dora]) --> G([Gaby])
    E --> B
    E --> D
    E --> G
    E --> F([Flynn])
    F --> G
    G --> E

On peut observer que Eroll suit Billy, Dora, Flynn et Gaby.

On souhaite établir, pour chaque utilisateur du réseau, la liste des personnes qui le suivent. Ce sont ses abonnés.

Les abonnés de Eroll sont Billy et Gaby. Les abonnés de Gaby sont Dora, Eroll et Flynn.

On représente ce réseau Immediam en machine par un dictionnaire dans lequel :

  • les clés sont les chaînes de caractères correspondant aux noms des utilisateurs,

  • les valeurs associées sont des listes de chaînes de caractères représentant les personnes suivies par cet utilisateur.

Écrire une fonction etre_aime qui :

  • prend en argument un dictionnaire reseau représentant un tel réseau Immediam ;

  • renvoie un dictionnaire qui associe à chaque membre du réseau (représenté par une chaine de caractères) la liste de ses abonnés.

Ordre indifférent

La liste des abonnés associée à chaque membre pourra contenir les membres dans n'importe quel ordre.

La fonction compare utilisée dans les tests permet de valider des ordres différents.

Exemples
>>> petit = {"Anna": ["Basile"], "Basile": []}
>>> etre_aime(petit)
{'Anna': [], 'Basile': ['Anna']}
>>> immediam = {
...     "Anna":  ["Billy"],
...     "Billy": ["Anna", "Eroll"],
...     "Carl":  ["Billy"],
...     "Dora":  ["Gaby"],
...     "Eroll": ["Billy", "Dora", "Flynn", "Gaby"],
...     "Flynn": ["Gaby"],
...     "Gaby":  ["Eroll"],
... }
>>> etre_aime(immediam)
{'Billy': ['Anna', 'Carl', 'Eroll'], 'Anna': ['Billy'], 'Eroll': ['Billy', 'Gaby'], 'Gaby': ['Dora', 'Eroll', 'Flynn'],'Dora': ['Eroll'], 'Flynn': ['Eroll']}
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5
.128013[(lbsS]et.ph;rd45f189uma"ovw7g_/R3=in{ 6Ok:é)y }q2Pc030j0c0d0s0E07090P0U070s09090D0t0d0E0f0t020H03090q0r0r0s0i0O020a0u070q0.0u0F0P000s0r0f0h0P0B0c0{0i0R0q0c09030A0^0`0|0~0?0f02031t1m1w0A1t0?0j0E0v0%0(0*0,0g0E0y0g071K0g0d0;030Y08070c1F0)0+0t1J1L1N1L0d1T1V1R0d0i1u0d0g0%11090f0s0F0,0S0t1X1H0t0m0!0c0F190c1R1?1^1}1Z201V230r2502040P0T0i0u0f0u090E14160W1;0i0i0c0U2q1m270F1u0A1/2C1,1.1-1S0j290,1N0F222n1R1C1E0'1Y2M0E2O0F0u2S1R0f2v1u2A2C2)0@1@162U1~2Z0i0{070;0n2z2-0=2,282/1Z2;2?0;0S2`1^2|2A2L0t310s2@020C352B0?382 0,3b3d0k3g372-393m0;0l3p3i3r3k3a0u2=3c0;0I3w2}2.1G303B32020x3G3j3J3l3L3D020o3P3y3R3A3C3d0p3p1x2'1m2S2F0j1.2K3z0U2!2f0V1D1u2%0c2(2{3'3;0W3|2~3Z0K0;0W0m3p0P3H3s0m0;0X2v0z0Z2e3'3Q2V0t0:02064j3Y4l0F0;2v090c0s0q4q424l4n0N0L3w0P4H494k2:450E3;484a3z0u0;0D4P4K1Z4n0G0Q4G4I4Q430;0m3B4V4r4L020f0c0i09152O4+4B1~0u0w0;2X4^3I4s4u1k4x4z1n3}4W0,4n4F56360H4I5f4J4,1Z44024)0i4 3s0;4h0c5o4R4|024~5c2B5h4_30524w4y4A501~4n055G5p4.4:4=0F4@5y415H4X0;0b5b2)5e5g5#4%4l5k0E475S5A5U3l5q0E4i5+5%4`5v5x2)5,5M1C4O5S5?5V025Y2{5!5#665{3z4t025}0u5L3z5J6e3Z6a5r6h4C5W6l4`0;0e6o5C020s0f4/0F0j6s590;4p5 583a0;4/4;4?5s6E5i6B020N4#674H600,5k0c0#6L2+6F5a6R6S5f6U6G6b4N6d6M5B6O5K6.5-6*6k6=394n0b5t3Z4S024U5=6#0;6;6!6N6*6I5P5R766/4m6n5S65684'022v0d0q0i0F6}516+5~5Z1m3 3{3(7x0A3+1m0d3-7C2I2D0s1U7z3+1s5T392v0r0z0m0s0K0c0z0g0C0;1e1g1i1k0P63361x2|1t0J160s0P0Z0F2o1;0F0v4:0.0P0W0$1N090d7%2s0^0U0U1k4w7n0$220P7 810$2s2%0M0j0M860*0c896r1z2|7A0X0Z0#02.