Python 3.x 如何将所有dict键从str转换为float

Python 3.x 如何将所有dict键从str转换为float,python-3.x,string,dictionary,Python 3.x,String,Dictionary,我现在有这本字典: mydict = { "123.23":10.50, "45.22":53, "12":123 } 我想得到这本键为float的字典: mydict = { 123:23:10.50, 45.22:53, 12:123 } 我知道我可以迭代密钥并重新创建一个新的dict,如下所示: new_dict = {} for k in mydict.keys(): new_dict[float(k)]=mydict[k] 但我希望它可能是可能的转换dict键内联而不必重

我现在有这本字典:

mydict = { "123.23":10.50, "45.22":53, "12":123 }
我想得到这本键为float的字典:

mydict = { 123:23:10.50, 45.22:53, 12:123 }
我知道我可以迭代密钥并重新创建一个新的dict,如下所示:

new_dict = {}
for k in mydict.keys():
    new_dict[float(k)]=mydict[k]
但我希望它可能是可能的转换dict键内联而不必重新创建一个新的dict

最有效的方法是什么?

我建议您使用易于理解的词典理解,如下所示:

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}
我希望它可能是可能的转换dict键内联而不必重新创建一个新的dict

最有效的方法是什么

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

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

对于listmydict.keys中的k: mydict[floatk]=mydict.popk 但是,由于删除,这可能比创建具有适当布局的新dict更有效,也可能不会更有效,因此优化绝不是。

使用理解:

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

只需使用一个简单的听写理解:my_dict=mydict={123.23:10.50,45.22:53,12:123}使用听写理解。my_dict={floati:j代表i,j在my_dict.items}printmy_dict{123.23:10.5,45.22:53,12.0:123}