我想从 float 类型的可能值列表中进行选择:
values = [400e-9,435e-9,498e-9]
ipywidgets 模块提供了 Select 和 Dropdown 小部件,它们接受字符串列表或字典。在后一种情况下,将显示这些键,并在选择相应的键时使用这些值。请参阅the list of widgets in the docs .
# Required imports for examples below
import ipywidgets as widgets
from IPython.display import display
事实上,直接提供我的值列表会引发错误,因为这些值是 float ,而不是字符串。
# 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 之前,如以下屏幕截图所示:screenshot of the resulting widget .
所以问题是,有没有办法对选择小部件中的条目进行排序?
一个明显的解决方法是仅向小部件提供我的字符串列表(在上面的示例中称为keys
)并实现自己从列表中查找相应的值,但我希望能够是一个更优雅的解决方案。
最佳答案
您可以传递元组列表:
vals = list(zip(keys,values))
w = widgets.Select(options=vals, description='Select one of the values:')
关于python - 如何对 ipywidgets 下拉或选择中的条目进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35023744/