首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ipywidget下拉或选择中对条目进行排序?

如何在ipywidget下拉或选择中对条目进行排序?
EN

Stack Overflow用户
提问于 2016-01-26 20:53:32
回答 2查看 4K关注 0票数 2

我想从浮动类型的可能值列表中选择:

代码语言:javascript
复制
values = [400e-9,435e-9,498e-9]

ipywidgets模块提供了Select和下拉小部件,它们要么接受字符串列表,要么接受字典。在后一种情况下,当选择相应的键时,将显示这些键并使用这些值。见文档中的小部件列表

代码语言:javascript
复制
# Required imports for examples below
import ipywidgets as widgets
from IPython.display import display

实际上,直接提供我的值列表会引发一个错误,因为这些值是浮动的,而不是字符串。

代码语言:javascript
复制
# This will raise a TraitError
w = widgets.Select(options=values,description='Select one of the values:')
display(w)

因此,我创建了一个字典,并将其传递给小部件:

代码语言:javascript
复制
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 )来提供小部件,并实现自己从列表中查找相应的值,但我希望有一个更优雅的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-01 12:32:13

您可以传递一个元组列表:

代码语言:javascript
复制
vals = list(zip(keys,values))
w = widgets.Select(options=vals, description='Select one of the values:')
票数 2
EN

Stack Overflow用户

发布于 2016-03-08 13:07:52

还有两个备选方案需要考虑:

  1. 将值从浮点数映射到字符串: W= widgets.Select(options=map(str,value),description=‘选择一个值:’) 在我看来,这比创建一个以值的字符串作为键的字典要简单得多。它也短得多:)。
  2. 使用命令的dict: 从集合导入OrderedDict名称= map(str,value) od_vals =OrderedDict(zip(名称,值))w= widgets.Select(options=od_vals,description=‘选择一个值:’) 这里的优点是列表names可以是您想要的任何东西,例如names=['choice 1','choice 2','choice 3']。这样,您就可以获得od_vals[w.selected_label]选择的值,这对于方法1或您接受的答案来说是不可能的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35023744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档