我对 Python 和一般编程都很陌生,所以请耐心等待我和我的代码:)
我试图为我的一些机器收集一些基于轮班的日期,并遇到了正确构建我的返回字典的问题。
当我单步执行该函数时,我可以看到每个班次都正确读取数据,并且“maschinen_liste”字典以及生成的“day”字典都是正确的,但是一旦我到达第二天,前一天内的数据日期条目更改为添加的当前数据,依此类推。 现在我的问题是,字典中的条目如何能够像这样向后改变? 或者我只是根本不明白字典和嵌套循环是如何工作的?
我已经将代码简化到了这一点,但我仍然没有看到任何错误,而且我无法弄清楚这里出了什么问题。
import random
NrByMonth = {
"Januar": "01" ,
"Februar": "02"
}
def Readshiftdata(year_input="2020"):
# dict structured like dataframe = {"Jahr":{"Monat":{"Tag":{"Presse":{"Schicht":{"elektrisch":{"Verbrauch1":"","VerbrauchN":""},"informationen":{"Datum":"","Schichtführer":"","Nutzungsgrad":""},"produktionsdaten":{"Artikel1":{"Charge":"","Gutteile":"","Ausschuss1":"","Ausschuss2":"","Ausschuss3":"","Werker":"","Qualitaetspruefer":""},"Artikel2":{"Charge":"","Gutteile":"","Ausschuss1":"","Ausschuss2":"","Ausschuss3":"","Werker":"","Qualitaetspruefer":""},"Artikel3":{"Charge":"","Gutteile":"","Ausschuss1":"","Ausschuss2":"","Ausschuss3":"","Werker":"","Qualitaetspruefer":""},"Artikel4":{"Charge":"","Gutteile":"","Ausschuss1":"","Ausschuss2":"","Ausschuss3":"","Werker":"","Qualitaetspruefer":""}}}}}}}}
return_data = {}
month = {}
year = year_input
maschinen_liste = {"Pr5":{}}
# iterating over every month
for this_month in NrByMonth:
day = {}
# iterating over every day per month
dayspermonth = 2
this_day = 1
for this_day in range(1,dayspermonth+1):
temp_day = this_day
# reading per maschine
for maschine in maschinen_liste:
# reading shift per maschine
shifts = {"Frühschicht":{},"Spätschicht":{},"Nachtschicht":{}}
for shift in shifts:
this_shift = {"E-Daten":{},"Informationen":{},"Produktionsdaten":{}}
# fetching artikel data
artikel = {"Artikel 1":{}}
for a in artikel:
dataframe = {}
Charge = random.randint(1,100)
Gutteile = random.randint(1,100)
dataframe = {"Charge":Charge,"Gutteile":Gutteile}
artikel[a] = dataframe
shifts[shift]["Produktionsdaten"] = artikel
maschinen_liste[maschine] = shifts
print(maschinen_liste)
day[temp_day] = maschinen_liste
print("temp day :")
print(temp_day)
print("day:")
print(day)
print("maschinen_liste :")
print(maschinen_liste)
input()
month[this_month] = day
print("month:\n\n\n")
print(month)
return_data[year] = month
return(return_data)
year = Readshiftdata()
print("year: \n\n\n")
print(year)
输出:
year = {'2020': {
'Januar': {
1: {
'Pr5': {
'Frühschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 41, 'Gutteile': 95}}},
'Spätschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 37, 'Gutteile': 54}}},
'Nachtschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 37, 'Gutteile': 39}}}}},
2: {
'Pr5': {
'Frühschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 41, 'Gutteile': 95}}},
'Spätschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 37, 'Gutteile': 54}}},
'Nachtschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 37, 'Gutteile': 39}}}}}},
'Februar': {
1: {
'Pr5': {
'Frühschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 41, 'Gutteile': 95}}},
'Spätschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 37, 'Gutteile': 54}}},
'Nachtschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 37, 'Gutteile': 39}}}}},
2: {
'Pr5': {
'Frühschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 41, 'Gutteile': 95}}},
'Spätschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 37, 'Gutteile': 54}}},
'Nachtschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 37, 'Gutteile': 39}}}}}}}}
如果我将
day[temp_day] = maschinen_liste
更改为 day[temp_day] = str(maschinen_liste)+str(temp_day)
它正确保存日期...
输出:
year = {'2020': {
'Januar': {
1: "{
'Pr5': {'Frühschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 77, 'Gutteile': 44}}},
'Spätschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 100, 'Gutteile': 72}}},
'Nachtschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 93, 'Gutteile': 22}}}}}1",
2: "{
'Pr5': {
'Frühschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 27, 'Gutteile': 21}}},
'Spätschicht': {'Produktionsdaten': {'Artikel 1': {'Charge':27, 'Gutteile': 29}}},
'Nachtschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 41, 'Gutteile': 72}}}}}2"},
'Februar': {
1: "{
'Pr5': {
'Frühschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 74, 'Gutteile': 27}}},
'Spätschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 65, 'Gutteile': 83}}},
'Nachtschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 14, 'Gutteile': 11}}}}}1",
2: "{
'Pr5': {'Frühschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 19, 'Gutteile': 16}}},
'Spätschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 57, 'Gutteile': 17}}},
'Nachtschicht': {'Produktionsdaten': {'Artikel 1': {'Charge': 56, 'Gutteile': 52}}}}}2"}}}
好的,它是一个字符串,每个字符串都会添加一个数字,但这表明数据显然在那里(我很困惑......)
在代码中,您可以在所有循环之外的开头初始化
maschinen_liste = {"Pr5":{}}
。当您执行 day[temp_day] = maschinen_liste
时,不会创建新字典(它只是对同一字典的引用)。所以最后,你每天都会指向同一本字典。
如果您将
maschinen_liste = {"Pr5":{}}
放入每日循环中,在 for this_day in range(1,dayspermonth+1):
之后,应该可以解决问题,因为它将每天创建一个新字典。