Python 如何在ipywidgets下拉列表或选择列表中对条目排序?
我想从float类型的可能值列表中选择:Python 如何在ipywidgets下拉列表或选择列表中对条目排序?,python,jupyter,jupyter-notebook,ipywidgets,Python,Jupyter,Jupyter Notebook,Ipywidgets,我想从float类型的可能值列表中选择: values = [400e-9,435e-9,498e-9] ipywidgets模块提供选择和下拉小部件,它们接受字符串列表或字典。在后一种情况下,当选择相应的键时,将显示键并使用值。看 事实上,提供我的值列表会直接引发错误,因为这些值是浮点数,而不是字符串 # This will raise a TraitError w = widgets.Select(options=values,description='Select one of the
values = [400e-9,435e-9,498e-9]
ipywidgets模块提供选择和下拉小部件,它们接受字符串列表或字典。在后一种情况下,当选择相应的键时,将显示键并使用值。看
事实上,提供我的值列表会直接引发错误,因为这些值是浮点数,而不是字符串
# 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之前,如以下屏幕截图所示:
所以问题是,有没有办法对选择小部件中的条目进行排序
一个明显的解决方法是只向小部件提供我的字符串列表(在上面的示例中称为
键
),并实现自己从列表中查找相应的值,但我希望会有一个更优雅的解决方案。您可以传递一个元组列表:
vals = list(zip(keys,values))
w = widgets.Select(options=vals, description='Select one of the values:')
还有两种选择需要考虑:
w = widgets.Select(options=map(str,values), description='Select one of the values:')
在我看来,这比创建一个以字符串作为键的字典更为惯用。它也短得多:)from collections import OrderedDict
names = map(str,values)
od_vals = OrderedDict(zip(names,values))
w = widgets.Select(options=od_vals, description='Select one of the values:')
这里的优点是,列表名称可以是您想要的任何内容,例如名称=['choice 1'、'choice 2'、'choice 3']
。然后,您可以通过od\u vals[w.selected\u label]
获取所选值,这对于方法1或您接受的答案是不可能的
你考虑过使用分类词典吗?
from collections import OrderedDict
names = map(str,values)
od_vals = OrderedDict(zip(names,values))
w = widgets.Select(options=od_vals, description='Select one of the values:')