【问题标题】:How to update dictionary value in for loop if the new value is greater than the old value?如果新值大于旧值,如何在 for 循环中更新字典值?
【发布时间】:2019-01-14 20:35:44
【问题描述】:

我正在尝试从包含日期和温度(每天每分钟的温度值)的 CSV 文件中获取每日最高温度。这段时间跨度为 6 个月,我需要这 6 个月中每一天的最高温度。

对于如何做到这一点,我有两个想法:

1:我想我可以使用字典,其中键作为日期(例如,'10/30/18'),值作为当天温度的列表。

我需要遍历每一行并将温度添加到对应的每一天。

这是我的开始,但不确定我是否以最好的方式接近这一点

dates={}
for row in reader:
    if row[0] in dates:
        dates[row[0]].append([float(row[2])])
    else:
        tempvalues=[]
        tempvalues.append(float(row[2]))
        dates.update({row[0]:tempvalues})

print(dates)

2:我可以再次使用日期作为键,但只有当温度值大于之前的值时才更新温度值。但我不确定如何将这种 if 语句放入字典循环中。

【问题讨论】:

  • 只需将一个列表设置为一个键,即:d = {'10/30/18' : [] } 并使用d['10/30/18'].append(temp)

标签: python dictionary


【解决方案1】:

我认为这样的事情应该可行:

dates={}

for row in reader:
    if row[0] in dates:
        dates[row[0]].append(float(row[2]))
    else:
        dates[row[0]] = [(float(row[2]))]

for k, v in dates.items():
    print (k, max(v))

如果您只想存储最高温度,这应该可行:

dates={}

for row in reader:
    if row[0] in dates:
        if dates[row[0]] < float(row[2]):
            dates[row[0]] = float(row[2])
    else:
        dates[row[0]] = float(row[2])

for k, v in dates.items():
    print (k, v)

【讨论】:

  • 这让我更近了 1 步,现在如果我想获得该列表的最大值或最小值的温度值,请说“2018 年 10 月 30 日”:[95.1、94.1、93.1] ,是否有获取最大值和相关日期的函数?
  • 对于浮点数列表,您可以使用min(list)max(list),如果您只想存储最大值,则可以使用less &lt; greater 比较。
  • 成功了,谢谢!!我知道我现在可以在哪里处理循环中的逻辑。非常感谢。
【解决方案2】:

你可以用list comprehension创建字典:

#for dicts with
# dates = { '10/30/18':[95.1,94.1,93.1],
#....   }       
min_dates = {date:min(temp)] for (date,temp) in dates}
max_dates = {date:man(temp)] for (date,temp) in dates}

【讨论】:

    猜你喜欢
    • 2020-12-20
    • 2021-05-13
    • 2020-12-17
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2022-07-24
    • 1970-01-01
    相关资源
    最近更新 更多