我想从浮动类型的可能值列表中选择:
values = [400e-9,435e-9,498e-9]ipywidgets模块提供了Select和下拉小部件,它们要么接受字符串列表,要么接受字典。在后一种情况下,当选择相应的键时,将显示这些键并使用这些值。见文档中的小部件列表。
# 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)但是,由于字典没有排序,因此生成的小部件以看似随机的顺序显示选项。在本例中,当我运行它时,498 e-9出现在435 e-9之前,如下面的屏幕截图:结果小部件的屏幕截图所示。
所以问题是,是否有一种方法来对选择小部件中的条目进行排序?
一个显而易见的解决方法是,只使用我的字符串列表(在上面的示例中称为keys )来提供小部件,并实现自己从列表中查找相应的值,但我希望有一个更优雅的解决方案。
发布于 2016-02-01 12:32:13
您可以传递一个元组列表:
vals = list(zip(keys,values))
w = widgets.Select(options=vals, description='Select one of the values:')发布于 2016-03-08 13:07:52
还有两个备选方案需要考虑:
names可以是您想要的任何东西,例如names=['choice 1','choice 2','choice 3']。这样,您就可以获得od_vals[w.selected_label]选择的值,这对于方法1或您接受的答案来说是不可能的。https://stackoverflow.com/questions/35023744
复制相似问题