【问题标题】:Python Dictionary ListPython 字典列表
【发布时间】:2011-04-17 03:26:01
【问题描述】:

最初我的程序是这样的:

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 都被最终循环的地址和数据替换了......我不知道出了什么问题。

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    dicList 是一个类属性。

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

    【讨论】:

      【解决方案2】:

      在你的例子中,dicList 是一个类属性,你需要一个实例属性。

      类属性只有一个对象可以引用(这正是您获得这些结果的原因),而实例属性是在实例化时创建的,因此每个实例都引用它们自己的dicList

      所以你想使用实例属性,你可以通过在构造函数中创建该属性来实现。

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

      【讨论】:

        猜你喜欢
        • 2018-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-21
        • 1970-01-01
        • 1970-01-01
        • 2014-10-15
        • 2015-07-23
        相关资源
        最近更新 更多