代码之家  ›  专栏  ›  技术社区  ›  fugu

生成类以迭代返回的结构

  •  0
  • fugu  · 技术社区  · 7 年前

    我试图构建一个包含三条信息的数据结构:a book 姓名,a page 数字和A sentence .

    我正在编一本有两把钥匙的词典 coordinates[book][page] = sentence 是的。但是,我想重复我的句子而不必重复 第页 钥匙( 因为我需要它们的访问顺序是随机的 )

    为了重现性的目的,这里是我正在创建的数据结构:

    pages     = [12, 41, 50, 111, 1021, 121]
    bookCodes = ['M', 'P', 'A', 'C', 'A', 'M']
    
    
    sampledSentances = ['THISISASENTANCE',
                        'ANDHEREISONEMOREEXAMP',
                        'ALLFROMDIFFERENTBOOKS',
                        'ANDFROMDIFFERENTPAGES',
                        'MOSLTYTHESAMELENGTHSS',
                        'BUTSOMEWILLBABITSHORT'
                        ]
    
    from collections import defaultdict
    coordinates = defaultdict(dict)
    
    for b, p, s in zip(bookCodes, pages, sampledSentances):
        coordinates[b][p] = s
    
    print coordinates
    

    我真正想做的是反复 sampledSentances 第页 相关信息。

    从周围的阅读中 question I asked yesterday )听起来我应该构建一个iterable类对象。

    这是我尝试过的,但我不确定如何使用它来迭代 样本意义 ,甚至这是否是正确的方法:

    # A class to build the object
    class Sentence(object):
        def __init__(self, b, p, s):
            self.book     = b
            self.page     = p
            self.sentence = s
    
        def getInfo(self):
            return self.book, self.page, self.sentence
    
    # Make a list, and append the book, page and sentence generated from the `Sentence` class
    sentenceInfo = []
    for b, p, s in zip(bookCodes, pages, sampledSentances):
        sentenceInfo.append(Sentence(b, p, s).getInfo())
    
    print(sentenceInfo)
    

    我是python中的新手,如果有任何帮助,我将不胜感激

    1 回复  |  直到 7 年前
        1
  •  1
  •   napuzba    7 年前

    你用 generator function 为了这个任务

    def iterSentances(bookCodes, pages, sampledSentances):
        zz = list(zip(bookCodes, pages, sampledSentances))
        random.shuffle(zz)
        for ss in zz:
            yield ss
    
    for b,p,s in iterSentances(bookCodes, pages, sampledSentances):
        print(b,p,s)