我有一个用户界面编写的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)
似乎字典初始化所有对象比列表慢。
答案 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
是一个列表,widgets
与for w in widget.values()
相比widgets
是widgets
,我希望{{1}}更快。但是在你的问题中给出了{{1}}的代码;无论您是使用列表还是字典存储一些小部件,它都不太可能成为您应用程序的瓶颈。