Список словарей Python

#python #dictionary

#python #словарь

Вопрос:

изначально моя программа была такой:

 inst = {}
class IContainer:
    dicList = {}


for i in range(10):
        inst[i] = IContainer()

def FindEnd(node):
    if node.text != None:
        inst[counter].dicList[node.tag] = node.text
    else:
        for subNode in node:
            FindEnd(subNode)

counter = 0
for element in root:
    if element.tag == "Items":
        for subE in element:
            if subE.tag == "Item":
                for subSubE in subE:
                    FindEnd(subSubE, counter)
                counter  = 1
  

это работает просто отлично, я смог разобрать материал в словаре, вместо этого я хочу создать список динамически.

итак

 counter = 0
for element in root:
    if element.tag == "Items":
        for subE in element:
            if subE.tag == "Item":
                inst[counter] = IContainer()
                for subSubE in subE:
                    FindEnd(subSubE)
                for i in range(len(inst)):
                    print inst[i]
                    print inst[i].dicList 

                counter  = 1
  

Когда я запускаю это

 for i in range(len(inst)):
    print inst[i]
    print inst[i].dicList 
  

все inst заменяются адресом и данными конечного цикла….Я понятия не имею, что происходит не так.

Ответ №1:

dicList является атрибутом класса.

 class IContainer:
    def __init__(self):
        self.dicList = {}
  

Ответ №2:

В вашем случае, dicList это атрибут класса, в котором вам нужен атрибут экземпляра.

Атрибуты класса имеют только один объект для ссылки (именно по этой причине вы получаете эти результаты), тогда как атрибуты экземпляра создаются при создании экземпляра, поэтому каждый экземпляр ссылается на свой собственный dicList .

Итак, вы хотите использовать атрибуты экземпляра, чего вы можете достичь, создав указанный атрибут в конструкторе.

 class IContainer:
    def __init__(self):
        self.dicList = {}