我想使用IPython Notebook小部件中的下拉小部件。一个简单的例子如下所示......
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时,就无法完成,如上例所示。
在我正在使用的示例中,我创建了一组小部件,允许用户使用下拉小部件选择文件。我希望文件按日期排序。但是,由于添加值的方式(使用字典),我似乎无法有效地执行此操作。
任何人都知道如何克服这个问题?
答案 0 :(得分: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
。