Искать текст в списке, чтобы найти наибольшее значение в python

У меня есть список предметов, и я хотел бы вернуть тот, у кого наибольшая степень тяжести, т.е. Вход может быть "Дождливый | Ледяной | Ветреный"

и список возможных входов может быть (в порядке степени): солнечный, облачный, ветреный, дождливый, ледяной.

С приведенным выше вводом я хотел бы выводить только Icy, поскольку он является самым разрывающим.

Я пробовал что-то вроде:

dictionary1 = {'sunny': 0, 'cloudy': 1, 'windy': 1, 'rainy': 2, 'icy': 3}
 with open(Conditions_csv, 'wb') as fw:
 writer = csv.writer(fw, delimiter=',')
 header = ['Date','latitude','longitude','Condition']
 writer.writerow(header)
 for row in cur.fetchall():
 conditions = row[3].split("|")


 for item in sorted(dictionary1.keys(),reverse= True):
 name = dictionary1[item]
 if name in conditions:
 print row
 print name
 writer.writerow(row + name)
db.close()

мой результат для выше будет:

(18/12/2017,45,-85, Rainy|Icy|Windy)
Icy
(18/12/2017,45,-85, Rainy|Icy|Windy)
Rainy
(18/12/2017,45,-85, Rainy|Icy|Windy)
Windy
(18/12/2017,47,-88, Rainy|Windy)
Rainy
(18/12/2017,47,-88, Rainy|Windy)
Windy
(18/12/2017,40,-84, Icy|Windy)
Icy
(18/12/2017,40,-84, Icy|Windy)
Windy

все, что я хочу повторить:

(18/12/2017,45,-85, Rainy|Icy|Windy)
Icy
(18/12/2017,47,-88, Rainy|Windy)
Rainy
(18/12/2017,40,-84, Icy|Windy)
Icy
2 ответа

Встроенная функция max позволяет передать необязательный key аргумент, который делает то, что, я думаю, вы просите:

>>> severities = {'sunny': 0, 'cloudy': 1, 'windy': 1, 'rainy': 2, 'icy': 3}
>>> max(['sunny', 'cloudy', 'windy', 'rainy', 'icy'], key=lambda s: severities[s])
'icy'


Вот что я использовал для своего ответа FYI:

with open(Conditions_csv, 'wb') as fw:
 writer = csv.writer(fw, delimiter=',')
 header = ['Date','latitude','longitude','Condition']
 writer.writerow(header)
 for row in cur.fetchall():
 conditions = row[3].split("|")
 Final = max(conditions, key=lambda s: dictionary[s])
 myList= row[0],float(row[1]),float(row[2]),Final
 writer.writerow(myList)
db.close()

licensed under cc by-sa 3.0 with attribution.