词典列表?

时间:2014-08-14 19:41:13

标签: list dictionary

我需要在脑海中创建一个类似于链接列表数组的结构(其中包含python list = arraydictionary = linked list)。我有一个名为blocks的列表,这就像我要做的那样: blocks[0] = {dictionary},{dictionary},{dictionary},...

blocks[1] = {dictionary},{dictionary},{dictionary},...

等。

目前我按如下方式构建块: blocks = []

blocks.append[()]

blocks.append[()]

blocks.append[()]

blocks.append[()]

我知道这看起来一定很荒谬。我只是无法在脑海中看到刚刚制作的东西,这是我问题的一部分。我从不同的字典项列表中分配一个块。以下是如何创建单个块的简要概述......

hold = {}

hold['file']=file

hold['count']=count

hold['mass']=mass_lbs

mg1.append(hold)
  ##此追加可能会多次发生mg1

blocks[i].append(mg1[j])

##其中i是我想要追加的块的索引,而j是与我想要抓取的mg1的任何字典项对应的列表索引。 / p>

我想在blocks中使用这四个主要索引的原因是,我只使用一个列表而不是block1 block2 block3 {{1}来缩短代码},这会让代码比现在更长。

1 个答案:

答案 0 :(得分:0)

好的,关于评论中讨论的内容,您正在寻找一种简单的方法来创建一个结构,该结构是一个包含四个项目的列表,其中每个项目都是字典列表,而其中一个字典中的所有字典都是这些列表具有相同的,但不一定是相同的。但是,如果您确切地知道每个字典将具有哪些密钥并且永远不会更改,那么可能值得考虑制作包含字典的类并使四个列表中的每一个都是对象列表。这会更容易保持在你的头脑中,而且在我看来更像Pythonic。您还可以获得确保字典中的键是静态的优势,还可以定义辅助方法。通过模拟容器类型的方法,您仍然可以使用字典语法。

class BlockA:
    def __init__(self):
        self.dictionary = {'file':None, 'count':None, 'mass':None }
    def __len__(self):
        return len(self.dictionary)
    def __getitem__(self, key):
        return self.dictionary[key]
    def __setitem__(self, key, value):
        if key in self.dictionary:
            self.dictionary[key] = value
        else:
            raise KeyError
    def __repr__(self):
        return str(self.dictionary)

block1 = BlockA()
block1['file'] = "test"
block2 = BlockA()
block2['file'] = "other test"

现在,您可以保证第一个块对象的所有实例都具有相同的键,而不是其他键。您可以为其他块或某些通用类创建类似的类,或者使用继承为这两个块组合。现在来建立你的数据结构:

blocks = [ [block1, block2], [], [], [] ]
print(blocks) # Or "print blocks" if you're not using Python 3.x
blocks[0][0]['file'] = "some new file"
print(blocks)

为这个块容器创建一个类也可能是值得的,具有添加每种类型的块和访问每种类型的块的特定方法。这样你就不会意外地将错误类型的块添加到四个列表中的一个或类似问题中。但是根据你使用这种结构的程度,这可能会有点过分。