Список словаря Python - PullRequest
       1

Список словаря Python

0 голосов
/ 17 апреля 2011

Изначально у меня была такая программа:

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 

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

Ответы [ 2 ]

1 голос
/ 17 апреля 2011

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

class IContainer:
    def __init__(self):
        self.dicList = {}
0 голосов
/ 17 апреля 2011

В вашем случае dicList - это атрибут класса , в котором вы хотите указать атрибут экземпляра.

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

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

class IContainer:
    def __init__(self):
        self.dicList = {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...