列表实现比字典实现更快吗?

时间:2014-01-04 19:13:34

标签: python pyside

我有一个用户界面编写的UI,我在其中通过列表理解将所有小部件放在列表中。我原本试图将所有内容放在字典理解中,以便所有内容都有标签。

widgets = [
    QtGui.QLineEdit(),
    QtGui.QSpinBox(),
    QtGui.QLabel("-"),
    QtGui.QSpinBox(),
    QtGui.QPushButton("Export"),
    QtGui.QPushButton("Del")
]

而不是

widgets = {
    "textField":QtGui.QLineEdit(),
    "minFrame":QtGui.QSpinBox(),
    "dash":QtGui.QLabel("-"),
    "maxFrame":QtGui.QSpinBox(),
    "exportButton":QtGui.QPushButton("Export"),
    "delButton":QtGui.QPushButton("Del")
}

我的问题是为什么当我实现字典时,元素的顺序似乎混淆了。因此,当我循环将它们添加到布局时,如下所示:

for w in widgets: # or widgets.values() for the dic
    mainLayout.addWidget(w)

似乎字典初始化所有对象比列表慢。

1 个答案:

答案 0 :(得分:0)

  • [1, 2, 3]是一个列表文字。 not 列表理解可能看起来像[x for x in something](参见for - 循环内部)
  • dict s相同:{1:2, 3:4}是一个普通的dict字面值。 not 字典理解可能看起来像{k:v for k, v in pairs}(再次参见for - 循环内部)
  

我的问题是为什么当我实现字典时,元素的顺序似乎混淆了。

字典中元素的顺序可能会随着运行而变化。不要依赖它。您可以使用对列表或collections.OrderedDict,具体取决于您的情况。

  

似乎字典初始化所有对象比列表慢。

如果for w in widgets是一个列表,widgetsfor w in widget.values()相比widgetswidgets,我希望{{1}}更快。但是在你的问题中给出了{{1}}的代码;无论您是使用列表还是字典存储一些小部件,它都不太可能成为您应用程序的瓶颈。