我希望下面的计数器检查列表中字典中的order num类。
...code...
self.counter = count(1)
def submit(self):
if Database.xoomDatabase[0]["Num Orden"] == next(self.counter):
self.counter = Database.xoomDatabase["Num Orden"]
Database.xoomDatabase.append(ordenOrganiz)
我之所以使用这种计数器,是因为每当应用程序关闭时,我都会转储一个包含Database.xoomDatabase的pickle文件。当应用程序执行时,pickle转储会被加载,其中的所有字典都会被推回到Database.xoom数据库中。这是保存在Database.xoomPatabase:上的字典
global ordenOrganiz
ordenOrganiz = {"Num Order": nicenum,
"Nombre": nombre,
"Email": email,
"Num Tel/Cel": num,
"Orden Creada:": fechacreacion1,
"Fecha de Entrega": fechaentrega}
print(ordenOrganiz["Nombre"])
return dict(ordenOrganiz)
我的问题是:如何在从pickle转储文件加载的最后一个"订单号"中启动计数器?
编辑:在Anand S Kumar的帮助下,我就是这样做到的:
if len(Database.xoomDatabase) == 0:
newCount = 0
else:
newCount = max(Database.xoomDatabase, key = lambda x:x['Num Orden'])["Num Orden"]
nombre = contents1
nicenum = int(newCount) + 1
此循环检查列表中是否有已保存的词典。如果没有dics。,计数从1开始。如果已经保存了dic。,计数将从保存到pickle转储中的最后一个"订单号"开始。
xoomDatabase = []
if path.isfile(file_path) == False:
open(file_path, "w").close()
else:
loadLis = open(file_path, "rb")
dalis = pickle.load(loadLis)
loadLis.close()
xoomDatabase.extend(dalis)
这个循环检查是否有要加载的文件,如果没有,它会更正一个。如果已经有一个保存的pickle转储,那么它将用以前保存的dict加载列表。
您可以直接在类内部创建一个类变量,然后使用Class.<variable>
访问它,也可以在__init__()
函数中使用此Class.<variable>
初始化每个变量的计数器并递增计数器。
示例-
class TempClass
counterInit = 0
def __init__(self):
self.counter = TempClass.counterInit
TempClass.counterInit += 1
...
然后在程序开始时,从pickle转储中读取数据,然后取最大的计数器并将其设置为计数器,如下例所示。
示例-
TempClass.counterInit = max(Database.xoomDatabase, key = lambda x:x['Num Orden'])
上述max()
给出了字典列表中最大的Num Orden
。