A. STEFANI
A. STEFANI

Reputation: 6736

How to convert all dict key from str to float

I have got this current dictionary :

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

and I would to get this dictionary (with key as float):

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

I know that I can iterate over key and recreate a new dict like this:

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

but I expect that it may be possible to convert dict key "inline" ( without to have to recreate a new dict ) ...

What is the most efficient method to do it ?

Upvotes: 0

Views: 773

Answers (3)

Albin Mathew
Albin Mathew

Reputation: 21

Use comprehension :

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

Upvotes: 1

Masklinn
Masklinn

Reputation: 42622

I expect that it may be possible to convert dict key "inline" ( without to have to recreate a new dict ) ...

What is the most efficient method to do it ?

Unless it materially matters to your runtime and you have time to waste profiling things and trying out various configurations, I'd strongly recommend just creating a second dict using a dict comprehension and focusing on actually relevant concerns: because dict views are "live" updating the dict as you iterate the keys directly may have odd side-effects e.g. you might find yourself iterating it twice as you first iterate the original keys, then try the keys you added; or the iteration might break entirely as deletions lead to internal storage compaction and the iterator gets invalidated.

So to change the key types without creating a new dict, you need to first copy the keys to a list, then iterate that and move values from one key to another:

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

However because of the deletions this may or may not be more efficient than creating a new dict with the proper layout, so the "optimisation" would be anything but.

Upvotes: -1

Laurent H.
Laurent H.

Reputation: 6536

I suggest you to use a dictionary comprehension, which is easy to understand, as follows:

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}

Upvotes: 1

Related Questions