我很难理解我在简单代码中做错了什么。我找到了“解决方案”,但我想了解“为什么” :)
通常,我使用字典和列表来做一个简单的“分组依据”。
当我为键分配一个值为2个元素的列表时,该字典中的第一个元素(值)被分为两个单独的值,所有其他值均正常运行-为2个元素列表。
所以在打印字典时我有4个值。
1301
425
['979','340']
['1301','977']
但是我能够解决这个问题,使其具有3对值-理想的结果:
['1301','425']
['979','977']
正如我所说,我能够使用.setdefault()
方法来解决此问题,并分配第一个进行简单分配的元素,但我不明白为什么会有所不同。
这是我的代码,该类的所有其他方面都正常工作,或者将在“未来”中正常工作:):D
import os
import copy
from pathlib import Path
class ManageSettings:
def __init__(self,record_or_not = False,config_path = ".\\settings\\"):
self.to_record = record_or_not
self.ini_path = config_path + "\\position_settings.ini" # file path for settings
path_to_save = Path(config_path)
path_to_save.mkdir(exist_ok=True)
self.__position_list = {}
def save_or_load (self,sequence = 0):
if(self.to_record):
pass
else:
self.load_settings()
def save_settings(self,sequence = 0):
with open(self.ini_path,'w') as file_writter:
for posXY in self.position_list:
file_writter.write("{};{};{}\n".format(sequence,posXY[0],posXY[1]))
def load_settings(self):
with open(self.ini_path,'r') as file_reader:
sequence_dict = {}
for line_XY in file_reader:
sequence,posX,posY = line_XY.strip().split(";")
XYposList = list((posX,posY))
print(XYposList)
if not sequence in sequence_dict:
在此部分,如果更改将打印出不同的结果
# sequence_dict.setdefault(sequence,[]).append( XYposList)
sequence_dict[sequence] = XYposList
else:
sequence_dict[sequence].append( XYposList) # self.position_list = sequence_dict
print ('in class')
for values in sequence_dict.values():
print (values)
self.position_list = sequence_dict
@property
def position_list(self):
return self.__position_list
@position_list.setter
def position_list(self,position_list):
self.__position_list = position_list
这是您如何简单地测试类,当然,如果您有ini文件:)
testClas = ManageSettings(False)
testClas.save_or_load()
print("outside the class")
for value in testKlas.position_list.values():
# print (len(value))
for test in value:
print (test)
编辑:嗨,这是ini文件的内容
0;1301;425
0;979;340
0;1301;977