タイプfloatの可能な値のリストから選択したい:
values = [400e-9,435e-9,498e-9]
ipywidgets モジュールは、文字列のリストまたは辞書のいずれかを受け入れる Select および Dropdown ウィジェットを提供します。後者の場合、キーが表示され、対応するキーが選択されたときに値が使用されます。ドキュメントのウィジェットのリストを参照してください。
# Required imports for examples below
import ipywidgets as widgets
from IPython.display import display
実際、値のリストを直接指定すると、値が文字列ではなく浮動小数点数であるため、エラーが発生します。
# This will raise a TraitError
w = widgets.Select(options=values,description='Select one of the values:')
display(w)
そこで、辞書を作成し、これをウィジェットに渡します。
keys = ["{:.2e}".format(val) for val in values]
valsdict = dict(zip(keys,values))
w = widgets.Select(options=valsdict, description='Select one of the values:')
display(w)
ただし、辞書はソートされていないため、結果のウィジェットにはオプションが一見ランダムな順序で表示されます。この場合、実行すると、このスクリーンショットに示すように、498e-9 が 435e-9 の前に表示されました:結果のウィジェットのスクリーンショット。
質問は、選択ウィジェットのエントリを並べ替える方法はありますか?
明らかな回避策は、ウィジェットに文字列のリスト (keys
上記の例で呼び出されます) のみを提供し、リストから対応する値を自分で検索することですが、もっと洗練された解決策があることを望んでいました。