Значения Float как словарный ключ

Я разрабатываю класс для анализа микротитрационных планшетов. Образцы описываются в отдельном файле, и записи используются для упорядоченного словаря. Одним из ключей является pH, который обычно указывается как float. например, 6.8

Я мог бы импортировать его как десятичное с Decimal('6.8'), чтобы избежать поплавка как ключа dict. Другим решением было бы заменить точку, например, p как 6p8, или написать 6p8 в моем описании образца и, следовательно, устранить проблему в начале. Но это может вызвать проблемы позже, так как я не могу рассчитать pH 6p8 на моих рисунках.

Как бы вы решили эту проблему?

Ответ 1

Нет проблем с использованием float как ключей dict.

Просто round(n, 1) их, чтобы нормализовать их в вашем ключевом пространстве. например.

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

Ответ 2

Возможно, вы хотите усечь ваш float перед использованием, это ключ?

Может быть, так:

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

Теперь ваш ключ:

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

Вы можете использовать его следующим образом:

dictionary[round(a,4)]   

для получения ваших значений