【问题标题】:convert integer key values in a dictionary转换字典中的整数键值
【发布时间】:2021-07-13 12:53:57
【问题描述】:

我的字典中有一个嵌套在 Python 列表中的数据,如下所示。我想要做的是将一些整数值从摄氏度转换为华氏度,但我知道我在尝试保存转换后的温度值时做错了。

data = [{'gas_station/headquarters/12032/Space Temperature Local': 21.368864059448242,
         'gas_station/headquarters/12033/Space Temperature Local': 22.3087215423584, 
         'gas_station/headquarters/31/ZN-T': 71.94377136230469, 
         'gas_station/headquarters/29/ZN-T': 72.39180755615234, 
         'gas_station/headquarters/12028/Space Temperature Local': 22.77256202697754, 
         'gas_station/headquarters/27/ZN-T': 71.6547622680664, 
         'gas_station/headquarters/30/ZN-T': 69.44559478759766, 
         'gas_station/headquarters/26/ZN-T': 71.9398422241211}, 
         {}]

for key, value in data[0].items():
    if value < 40:
        #print(key, value)
        print(f'*** [INFO] *** -  Celsius found values on {key} is {value}')
        value = (9/5) * value + 32
        print(f'*** [INFO] *** -  New converted temp is {value}')

我在将新转换的摄氏度到华氏度温度数据保存到原始列表/字典数据类型时做错了。有人会有建议吗?如果我再次打印原始的data,原始温度单位就会出现。

for key, value in data[0].items():
    print(key, value)

【问题讨论】:

  • 不是分配给变量value,而是使用data[0][key] = (9/5) * value + 32分配给字典值
  • 天哪,这很容易,谢谢你还在学习:)如果你发布一个答案,我会打绿勾
  • 没关系,很高兴它有帮助!快乐学习:)

标签: python


【解决方案1】:

您没有将值分配回dict。如果您想坚持自己的循环,请执行以下操作:

data[0][key] = (9/5) * value + 32

另外,您可以考虑使用 dict 理解而不是循环

data[0] = {key: (9/5)*value+32 if value<40 else value for key,value in data[0].items()}
>>> data[0]
{'gas_station/headquarters/12032/Space Temperature Local': 70.46395530700684,
 'gas_station/headquarters/12033/Space Temperature Local': 72.15569877624512,
 'gas_station/headquarters/31/ZN-T': 71.94377136230469,
 'gas_station/headquarters/29/ZN-T': 72.39180755615234,
 'gas_station/headquarters/12028/Space Temperature Local': 72.99061164855956,
 'gas_station/headquarters/27/ZN-T': 71.6547622680664,
 'gas_station/headquarters/30/ZN-T': 69.44559478759766,
 'gas_station/headquarters/26/ZN-T': 71.9398422241211}

【讨论】:

  • 你能帮我理解Separately, you might consider using dict comprehension instead of looping吗?非计算机科学的人,循环是否比字典理解消耗更多的内存和更慢的速度?看起来您的 dict 理解中有一个循环......感谢您提供任何高级别的见解,特别是您的额外评论,以便更好地学习:)
  • 由于某种原因,列表理解不会将转换后的温度数据保存到原始数据中
  • 您需要将其分配回data[0]。编辑了我的答案。
  • 是的,谢谢我必须阅读理解
【解决方案2】:

我认为您没有将其保存到字典中。尝试关注,

for key, value in data[0].items():
    if value < 40:
        #print(key, value)
        print(f'*** [INFO] *** -  Celsius found values on {key} is {value}')
        value = (9/5) * value + 32
        data[0][key] = value
        print(f'*** [INFO] *** -  New converted temp is {value}')

【讨论】:

    【解决方案3】:

    除了把他们的逗号你应该尝试'和'

    for key and value in data[0].items():
        print(key, value)
    

    【讨论】:

    • 你的回答没有意义
    • @MARTIAN Y - 你绝对错了。 for key and value 甚至不是正确的语法。请在发布之前测试您的代码。
    猜你喜欢
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2012-03-02
    • 1970-01-01
    相关资源
    最近更新 更多