У меня проблемы с пониманием того, что я сделал неправильно в своем простом коде. Я нашел "решение", но я хотел бы понять, "почему" :)В общем, я делаю простую группу, используя словарь и списки. Когда я присваиваю ключу значение, представляющее собой список из 2 элементов, первый элемент (значение) в этом словаре разделяется на два отдельных значения, все остальные значения ведут себя правильно - это список из 2 элементов.
ИтакУ меня было 4 значения, когда был напечатан словарь.
1301
425
['979', '340']
['1301', '977']
Но я смог исправить это, чтобы получить 3 пары значений - желаемый результат:
['1301', '425']
['979', '340']
['1301', '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