如何将所有字典键从 str 转换为浮点数



我有这个当前的字典:

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

我会得到这个字典(键作为浮点数(:

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

我知道我可以迭代密钥并重新创建一个新的字典,如下所示:

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

但我希望有可能将字典键"内联"转换(无需重新创建新字典(......

最有效的方法是什么?

我建议你使用字典理解,这很容易理解,如下所示:

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}

使用理解:

new_dict =  { float(k): v for k, v in mydict.items() }
我希望可以

"内联"转换字典键(无需重新创建新字典(...

最有效的方法是什么?

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

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

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

但是,由于删除,这可能比创建具有正确布局的新字典更有效,也可能不更有效,因此"优化"将不是。

最新更新