Ondersteuning > Programmeren

Python probleempje

(1/1)

BaukeP:
Ik gebruik de volgende functie om de max van bijv. kolom 4 te krijgen van een list of lists.
def get_max_by_col(li, col):
    return max(li, key=lambda x: float(x[col]))[col]

en dat gaat prima!
Ik wil echter ook het eerste veld van de gevonden max list. Is in dit geval de datum.
Een maximale waarde is leuk, maar de datum waarop niet minder!
Dus in de laatste regel ook veld 1:
iets als:  return datum,max(li, key=lambda x: float(x[col]))[col] of
return li[?][0],max(li, key=lambda x: float(x[col]))[col]
Het lukt mij echter niet. Graag wat hulp.
Alvast bedankt, Bauke

MKe:
Kun je niet beter listcomprehensions gebruiken?

Ik zou het zo doen:


--- Code: ---def get_max_by_column(li, column):
    max_value = max(li, key=lambda x: float(x[col]))[col]
    datums = [i[0] for i in li if value == max_value]
   # datums is een lijst voor het geval de max_value meerdere keren voorkomt
    return datums, max_value

--- Einde van code ---

Voor nette code is het trouwens zowiezo beter om dit te scheiden. Al die lambda's enzo in een regel maakt het zeer onleesbaar.

BaukeP:
Bedankt MKe,
Ik ga het uitproberen!

Bauke

BaukeP:
MKe,
Het werkt (uiteraard) uitstekend. Bedankt

Bauke

MKe:
Graag gedaan.

Navigatie

[0] Berichtenindex

Naar de volledige versie