Float values as dictionary key

2019-01-07 22:15发布

问题:

I am developing a class for the analysis of microtiter plates. The samples are described in a separate file and the entries are used for an ordered dictionary. One of the keys is pH, which is usually given as float. e.g 6.8

I could import it as decimal with Decimal('6.8') in order to avoid a float as dict key. Another solution would be to replace the dot with e.g p like 6p8 or to write 6p8 in my sample description and therefore eliminating the problem at the beginning. But this would cause troubles later on since i cannot plot pH of 6p8 in my figures.

How would you solve this issue?

回答1:

There's no problem using floats as dict keys.

Just round(n, 1) them to normalise them to your keyspace. eg.

>>> hash(round(6.84, 1))
3543446220
>>> hash(round(6.75, 1))
3543446220


回答2:

Perhaps you want to truncate your float prior to using is as key?

Maybe like this:

a = 0.122334
round(a, 4)       #<-- use this as your key?

Your key is now:

0.1223           # still a float, but you have control over its quality

You can use it as follows:

dictionary[round(a, 4)]   

to retrieve your values