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
.12801342ny6g3Np )rPv1x=;oa{ckm}iu5(,e:ts]Shl970w[bf8/d050W0F0H0u0A0M0I0k0w0M0u0I0I0r010H0A0j010406050I0B0y0y0u0m0e040K0t0M0B0;0t0d050V0{0}0 110_0j041a1h051k0V1k1m1h0_0W0A0o0)0+0-0/0L0A0g0L0M1A0L0H0@050!0S0M0F1v0,0.011z1B1D1B0H1J1L1H0H0S0t0W111I0m1i0H0L0)140I0j0u0d0/0c011N1x010T0$0F0d0u0y0F1H1/1;1_1P1|1L1 210@0a0k0n0m0t0j0t0I0A170d0k0Y1-0m0m0F0w2m1a240d1i0V1+2z0H1)1(1*0W260/1D0d1~2j1H1s1u0*1O2J0A2L0d1#1t1H0j2s1i2x2z2%0`1:2n2R1`2W0m0~0M0@0k0p2w2+0^2*252-1P2/2;2?0c2_1;2{2x2I01300u2=040k0h342y0_372~0/3a3c0k0b3g362+383m2?0C3q3i3s3k390t2:3b2?0f3x2|2,1w2 3C313d0O3H3j3K3l3M3E3d0U3Q3z3S3B3D3n0N3Y2}3!3u040p0P3)3J2S3#3N0p2^1b2`3y3*3=3,0p333`351j2#1a2P2C0W2G380w1#221i471l452)422y054c0Y2$3Z3=0x0@0Y0T3q3I380Q2?4w3R3~0T0@0F0q2D0F210I4B4q1`0?040D4M3}2.0@0o3b0F0B0m4L4k4p4T1P4P0l0G3x0k4.0k4x3A4s040A4v4$4:4C4U044W1L4Z4#2%4{4N1P0t0@0r0r3q544(0/4P0R0J4,4$064/5l5c3;1`4?2s0H4Z194`4;3!4P0v4S5o1P0I1@04010y2U015A384P5i535w4r0w0@0i180F5K3A4P0E5b5P1`5D0@5G0u0q5J4$5#4)0@5N2`5n380x5R045T2L5W5x0@0z4-4/5.0/4?0F0%5V5-4|5/045;355k5m4.63390@5H0d0A5!6a0/57045a5v6p6j4~4X515}3=5f6A1`5H0@3/69555e0@0J616g6i0d6k5*6n6u6J016r6t5O6v6Q6x504!6D6b0R6)0/6F046H2)6v4P6M5j6g6h6v4?0T3C6o6V6#0q6 5d6W4z4@5u6Z704V6y6(6I745M6N6_6`6V4?4^735B3l0@726U746r020M0H0s7n3t6k2U6T6;6V7g6^7i6_6P7B6m7z3A6X7N3+7q7h7i6i7l4_7974717Q3=7u0g7x7#4}0~0q7D2`6i7G2%6f7I5m7K047,7.355?7O587*2 7S7H6O6{0@5r5t816K045z7e7o015%5F6l5,7E7f5:8a6w6l7|4l6=0@5Z7s8f8h5)5+6,017;5=7_7{8B4P605j1a4n0F2z2!8N461t482C2E2A1!1$2C0u1K8Q0V470_8%0Z0#0%04.