【问题标题】:How to convert all dict key from str to float如何将所有dict键从str转换为float
【发布时间】:2020-01-23 07:29:37
【问题描述】:

我有这本最新的字典:

mydict = { "123.23":10.50, "45.22":53, "12":123 }

我会得到这本字典(键为浮点数):

mydict = { 123:23:10.50, 45.22:53, 12:123 }

我知道我可以像这样遍历 key 并重新创建一个新的 dict:

new_dict = {}
for k in mydict.keys():
    new_dict[float(k)]=mydict[k]

但我希望可以将字典键转换为“内联”(无需重新创建新字典)...

最有效的方法是什么?

【问题讨论】:

  • 只需使用简单的dict理解:my_dict=mydict = { "123.23":10.50, "45.22":53, "12":123 } # using dict comprehension. my_dict={float(i):j for i,j in my_dict.items()} print(my_dict) # {123.23: 10.5, 45.22: 53, 12.0: 123}

标签: python-3.x string dictionary


【解决方案1】:

建议大家使用字典理解,比较容易理解,如下:

my_dict = { "123.23":10.50, "45.22":53, "12":123 }
my_dict = {float(i):j for i,j in mydict.items()}

print(my_dict) # {123.23: 10.5, 45.22: 53, 12.0: 123}

【讨论】:

    【解决方案2】:

    使用理解:

    new_dict =  { float(k): v for k, v in mydict.items() }
    

    【讨论】:

      【解决方案3】:

      我希望可以将字典键“内联”(不必重新创建新字典)...

      最有效的方法是什么?

      除非它对您的运行时很重要并且您有时间浪费分析事物和尝试各种配置,否则我强烈建议使用 dict 理解创建第二个 dict 并关注实际相关的问题:因为 dict 视图是“ live”在您直接迭代键时更新字典可能会产生奇怪的副作用,例如当您第一次迭代原始键时,您可能会发现自己迭代了两次,然后尝试添加的键;否则迭代可能会完全中断,因为删除会导致内部存储压缩并且迭代器会失效。

      所以要在不创建新字典的情况下更改键类型,您需要首先将键复制到一个列表,然后迭代该列表并将值从一个键移动到另一个:

      for k in list(mydict.keys()):
          mydict[float(k)] = mydict.pop(k)
      

      但是由于删除,这可能会或可能不会比创建具有适当布局的新字典更有效,因此“优化”不会。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-17
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        • 2021-11-18
        • 2018-07-28
        相关资源
        最近更新 更多