【发布时间】:2015-09-16 14:30:04
【问题描述】:
我目前正试图弄清楚如何为我的程序更正执行几个循环,以便让它按我想要的方式运行。
该程序的背景很少,我有一个名称列表、一个字典列表和一个字典。目标是将字典列表与字典进行比较以获得正确的值。我的意思是假设我有一群动物(这是名称列表,我们称之为setNames),这些动物中的每一个(setNames)都有不同的房子、食物、水和床。 (这是字典列表,我们称之为setData)。最后,我们为这些字典中的每一个都提供了正确的值 (setData)。我们称之为correct_parameters。
由于每只动物都有自己的字典,他必须确保自己的字典有正确的参数。
程序执行以下操作。
- 首先,它将“修复”我们的字典列表 (
setData),以便我们稍后将其与我们的correct_parameters进行比较 - 然后,一旦我们的
setData被拆分/条带化,它将开始一个循环过程来遍历我们的setNames列表中的每个动物。 - 最后,一旦完成循环,它将为每个单独的动物创建一个选项卡,其中包含我们在比较时不正确的参数。
视觉示例:
为了进一步解释图像,我们有 setNames、setData 和 Correct_parameters 如我们所见,setData 与 correct_parameters 进行比较,以及任何不正确或不匹配的内容打印在标签上。
问题:
我的问题是为不正确数据中的每个参数创建了一个选项卡:
我对 python 还很陌生,我仍在试图弄清楚如何更正循环这个函数。有什么想法吗?
代码:
from PyQt4 import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self, parent = None):
super(Window, self).__init__(parent)
# Create a QTabWidget where all the tabs will be held
self.myTabs = QtGui.QTabWidget()
# Loop through our animal names
setNames = ['Cat', 'Dog', 'Bird']
setData = [{'House=15': 'House=15', 'Food=2': 'Food=2', 'Water=4': 'Water=4', 'Bed=6': 'Bed=6'}, {'House=14': 'House=14', 'Food=2': 'Food=2', 'Water=5': 'Water=5', 'Bed=6': 'Bed=6'}, {'House=15': 'House=15', 'Food=8': 'Food=8', 'Water=4': 'Water=4', 'Bed=9': 'Bed=9'}]
lst = setData
for idx, val in enumerate(lst):
o = {}
for k,v in val.iteritems():
if '=' in k:
k = k.split('=')[0]
if '=' in v:
v = v.split('=')[1]
v = v.replace('"','')
v = v.strip()
o[k] = v
lst[idx] = o
count = 0
print lst
correct_parameter = {'House': '15', 'Food': '12', 'Water': '4', 'Bed': '4'}
while count < len(setNames):
for number, item in enumerate(lst,0):
for tabName in setNames:
for param, correct in correct_parameter.items():
tabLabel = QtGui.QTextEdit()
tabWidget = QtGui.QWidget()
self.myTabs.addTab(tabWidget, tabName)
if item.get(param) != correct:
tabLabel.append('{} = {}'.format(param, item.get(param)))
# Set the tab widget's layout
tabLayout = QtGui.QVBoxLayout()
tabLayout.addWidget(tabLabel)
tabWidget.setLayout(tabLayout)
QtGui.QApplication.processEvents()
count += 1
# Set the main layout
mainLayout = QtGui.QVBoxLayout()
mainLayout.addWidget(self.myTabs)
self.setLayout(mainLayout)
# Resize our window and show it
self.resize(300, 300)
self.show()
import sys
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main_window = Window()
QtGui.QApplication.processEvents()
main_window.show()
sys.exit(app.exec_())
【问题讨论】:
标签: python list loops dictionary tabs