在 ipython 笔记本中的下拉小部件中对值进行排序
Sorting the values within a dropdown widget in ipython notebook
我想使用 IPython 笔记本小部件中的下拉小部件。一个简单的例子如下所示...
from IPython.display import display
from IPython.html import widgets
import random
genName = lambda : ''.join([chr(random.randint(65, 90)) for i in range(10) ])
testValues = [ genName() for i in range(20) ]
testValues = sorted(testValues)
testValues = dict(zip(testValues, testValues)) # This is not sorted because it is a dict
xx = widgets.DropdownWidget(values=testValues)
display(xx)
现在,要在 DropdownWidget
中插入的值接受字典,众所周知,这不是排序元素。这样做的问题是,当我们想要创建一个小部件并按特定顺序在下拉列表中排列 valeus 时,就无法完成,如上例所示。
在我使用的示例中,我创建了一组小部件,允许用户使用下拉小部件 select 文件。我希望文件按日期排序。但是,由于添加值的方式(使用字典),我似乎无法有效地做到这一点。
有人知道如何解决这个问题吗?
至少有2个选项:
使用 OrderedDict 而不是经典字典,例如
from collections import OrderedDict
...
testValues = OrderedDict(zip(testValues, testValues)) # from your example
如果不要求选择和得到的值不同,
您可以使用列表而不是 dict,如 here 所示。这样,小部件的值始终等于所选文本。你的例子看起来像
...
testValues = [ genName() for i in range(20) ]
testValues = sorted(testValues)
xx = widgets.DropdownWidget(values=testValues)
...
根据您的代码,我假设您使用的是 IPython 2.x。请注意,在 IPython 3.x 中,小部件称为 widgets.Dropdown
,关键字 values
现在是 options
.
我想使用 IPython 笔记本小部件中的下拉小部件。一个简单的例子如下所示...
from IPython.display import display
from IPython.html import widgets
import random
genName = lambda : ''.join([chr(random.randint(65, 90)) for i in range(10) ])
testValues = [ genName() for i in range(20) ]
testValues = sorted(testValues)
testValues = dict(zip(testValues, testValues)) # This is not sorted because it is a dict
xx = widgets.DropdownWidget(values=testValues)
display(xx)
现在,要在 DropdownWidget
中插入的值接受字典,众所周知,这不是排序元素。这样做的问题是,当我们想要创建一个小部件并按特定顺序在下拉列表中排列 valeus 时,就无法完成,如上例所示。
在我使用的示例中,我创建了一组小部件,允许用户使用下拉小部件 select 文件。我希望文件按日期排序。但是,由于添加值的方式(使用字典),我似乎无法有效地做到这一点。
有人知道如何解决这个问题吗?
至少有2个选项:
使用 OrderedDict 而不是经典字典,例如
from collections import OrderedDict ... testValues = OrderedDict(zip(testValues, testValues)) # from your example
如果不要求选择和得到的值不同, 您可以使用列表而不是 dict,如 here 所示。这样,小部件的值始终等于所选文本。你的例子看起来像
... testValues = [ genName() for i in range(20) ] testValues = sorted(testValues) xx = widgets.DropdownWidget(values=testValues) ...
根据您的代码,我假设您使用的是 IPython 2.x。请注意,在 IPython 3.x 中,小部件称为 widgets.Dropdown
,关键字 values
现在是 options
.