在ipython笔记本中的下拉窗口小部件中对值进行排序

时间:2015-04-20 04:43:50

标签: python widget ipython-notebook

我想使用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时,就无法完成,如上例所示。

在我正在使用的示例中,我创建了一组小部件,允许用户使用下拉小部件选择文件。我希望文件按日期排序。但是,由于添加值的方式(使用字典),我似乎无法有效地执行此操作。

任何人都知道如何克服这个问题?

1 个答案:

答案 0 :(得分:2)

至少有两个选项:

  1. 使用OrderedDict而不是经典字典,例如

    from collections import OrderedDict
    ...
    testValues = OrderedDict(zip(testValues, testValues)) # from your example
    
  2. 如果您不要求选择和获得的值不同, 你可以使用列表代替dict,如here所示。这样,窗口小部件的值始终等于所选文本。你的例子看起来像是

    ...
    testValues = [ genName() for i in range(20) ]
    testValues = sorted(testValues)
    xx = widgets.DropdownWidget(values=testValues)
    ...
    
  3. 根据您的代码,我假设您使用的是IPython 2.x.请注意,在IPython 3.x中,小部件名为widgets.Dropdown,关键字values现在为options