如何将所有dict键从str转换为float

时间:2020-01-23 07:29:37

标签: 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 }

我知道我可以遍历键并重新创建这样的新字典:

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

但是我希望可以转换字典键“内联”(而不必重新创建新字典)...

最有效的方法是什么?

3 个答案:

答案 0 :(得分: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}

答案 1 :(得分:1)

使用理解力:

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

答案 2 :(得分:-1)

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

最有效的方法是什么?

除非它对您的运行时具有实质性的影响,并且您有时间浪费概要分析和尝试各种配置,但我强烈建议您仅使用dict理解来创建第二个dict,并专注于实际相关的问题:因为dict视图是“实时”在直接迭代键时更新字典可能会有奇怪的副作用,例如您可能会发现自己在第一次迭代原始密钥,然后尝试添加的密钥时对其进行了两次迭代。否则迭代可能会完全中断,因为删除操作会导致内部存储压缩,并且迭代器无效。

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

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

但是,由于删除操作,这可能比创建具有正确布局的新字典更有效,也可能没有效率,因此“优化”将无济于事。