在python中根据列表查找文本以查找最大值

2024-05-15 10:12:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个项目列表,我想返回一个最大的严重性,即输入可以是“雨|冰|风”

可能的输入可能是(按严重程度排序):晴天、多云、刮风、下雨、结冰

有了上面的输入,我想只输出冰,因为它是最严重的

我试过这样的方法:

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

Tags: csvnameinforitemconditionswriterrow
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'

以下是我的答案供参考:

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()

相关问题 更多 >