Dictionnaire de valeurs extrêmes

Écrire une fonction extremes qui prend en paramètre un tableau valeurs de nombres a priori non triés, et qui renvoie la plus petite ainsi que la plus grande valeur du tableau sous la forme d'un dictionnaire à deux clés 'min' et 'max'.

Si le tableau est vide, les extrêmes n'existent pas ; on utilisera alors None pour chacun.

Contrainte

On n'utilisera pas les fonctions min, max, sort, sorted fournies par le langage.

Exemples
>>> valeurs = [0, 1, 4, 2, -2, 9, 3, 1, 7, 1]
>>> resultat = extremes(valeurs)
>>> resultat
{'min': -2, 'max': 9}
>>> valeurs = [37, 37]
>>> resultat = extremes(valeurs)
>>> resultat
{'min': 37, 'max': 37}
>>> valeurs = []
>>> resultat = extremes(valeurs)
>>> resultat
{'min': None, 'max': None}
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
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 : 10/10
.128013buS[,34l(wnx/8p)aPk0;:hors1v7c256mgyd]i{9eN}ft =050L0Q0U0r0N0i0A0V0E0i0r0A0A0W010U0N0p010406050A0c0I0I0r0z0K040d0y0i0c0;0y0l050n0{0}0 110_0p041a1h051k0n1k1m1h0_0L0N0C0)0+0-0/0x0N0J0x0i1A0x0U0@050!0b0i0Q1v0,0.011z1B1D1B0U1J1L1H0U0b0y0L111I0z1i0U0x0)140A0p0r0l0/0F011N1x010T0$0Q0l0r0I0Q1H1/1;1_1P1|1L1 210@0a0V0s0z0y0p0y0A0N170l0V0Y1-0z0z0Q0E2m1a240l1i0n1+2z0U1)1(1*0L260/1D0l1~2j1H1s1u0*1O2J0N2L0l1#1t1H0p2s1i2x2z2%0`1:2n2R1`2W0z0~0i0@0V0B2w2+0^2*252-1P2/2;2?0F2_1;2{2x2I01300r2=040V0g342y0_372~0/3a3c0V0h3g362+383m2?0G3q3i3s3k390y2:3b2?0H3x2|2,1w2 3C313d0D3H3j3K3l3M3E3d0o3Q3z3S3B3D3n0P3Y2}3!3u040B0u3)3J2S3#3N0B2^1b2`3y3*3=3,0B333`351j2#1a2P2C0L2G380E1#221i471l452)422y054c0Y2$3Z3=0t0@0Y0T3q3I380k2?4w3R3~0T0@0Q0m2D0Q210A4B4q1`0?040j4M3}2.0@0C3b0Q0c0z4L4k4p4T1P4P0q0w3x0V4.0V4x3A4s040N4v4$4:4C4U044W1L4Z4#2%4{4N1P0y0@0W0W3q544(0/4P0e0M4,4$064/5l5c3;1`4?2s0U4Z194`4;3!4P0O4S5o1P0A1@04010I2U015A384P5i535w4r0E0@0R180Q5K3A4P0f5b5P1`5D0@5G0r0m5J4$5#4)0@5N2`5n380t5R045T2L5W5x0@0S4-4/5.0/4?0Q0%5V5-4|5/045;355k5m4.63390@5H0l0N5!6a0/57045a5v6p6j4~4X515}3=5f6A1`5H0@3/69555e0@0M616g6i0l6k5*6n6u6J016r6t5O6v6Q6x504!6D6b0e6)0/6F046H2)6v4P6M5j6g6h6v4?0T3C6o6V6#0m6 5d6W4z4@5u6Z704V6y6(6I745M6N6_6`6V4?4^735B3l0@726U746r020i0U0v7n3t6k2U6T6;6V7g6^7i6_6P7B6m7z3A6X7N3+7q7h7i6i7l4_7974717Q3=7u0J7x7#4}0~0m7D2`6i7G2%6f7I5m7K047,7.355?7O587*2 7S7H6O6{0@5r5t816K045z7e7o015%5F6l5,7E7f5:8a6w6l7|4l6=0@5Z7s8f8h5)5+6,017;5=7_7{8B4P605j1a4n0Q2z2!8N461t482C2E2A1!1$2C0r1K8Q0n470_8%0Z0#0%04.