web-dev-qa-db-ja.com

辞書キーとしてのフロート値

マイクロタイタープレートの分析クラスを開発しています。サンプルは別のファイルに記述され、エントリは順序付けされた辞書に使用されます。キーの1つはpHで、通常はフロートとして与えられます。例:6.8

Floatをdictキーとして回避するために、Decimal('6.8')を使用して10進数としてインポートできます。別の解決策は、ドットをたとえば6p8のようなpに置き換えるか、サンプルの説明に6p8と書くことで、最初から問題を排除することです。しかし、私の図では6p8のpHをプロットできないので、後で問題が発生します。

この問題をどのように解決しますか?

22
Moritz

フロートをdictキーとして使用しても問題はありません。

それらをround(n, 1)にして、キースペースに正規化します。例えば。

>>> hash(round(6.84, 1))
3543446220
>>> hash(round(6.75, 1))
3543446220
24
John La Rooy

おそらく、キーを使用する前にフロートを切り捨てたいですか?

多分このように:

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)]   

値を取得する

5

別のオプションはタプルを使用することです:

dictionary = {(6.8,): 0.3985}
dictionary[(6.8,)]

次に、後でプロットするために値を取得することは、次のようなもので簡単に行えます

points = [(pH, value) for (pH,), value in dictionary.items()]
    ...
0
minkwe