Python~访问模板类中的元组成员

时间:2010-08-19 17:29:55

标签: python sqlite dictionary

我是Python新手 - 预先警告!

我有一个模板类,它以列表作为参数,并将列表成员应用于模板。这是第一堂课:

class ListTemplate:

    def __init__(self, input_list=[]):
        self.input_list = input_list

    def __str__(self):
        return "\n".join([self._template % x for x in self.input_list])

这是模板代码/类:

class HTML_Template(ListTemplate):

    _template = """ 
      <li>
        <table width="100%%" border="0">
          <tr>
            <td>Title: %(title)s</td>
            <td>Link: %(isbn)s</td>
          </tr>
          <tr>
            <td>Author: %(author)s</td>
            <td>Date: %(pub_date)s</td>
          </tr>
          <tr>
            <td>Summary: %(isbn)s</td>
            <td>Description: %(descr)s</td>
          </tr>
        </table>
        <hr>
      </li>"""

问题在于:

我使用fetchall从sqlite数据库中提取数据,这会返回一个元组列表。我可以通过将模板更改为%s而不是%(isbn)等来将此元组列表传递给此方法,但是,我需要在模板中多次访问isbn成员。为了做到这一点,我将元组加载到字典中并将它们推入另一个列表...然后传递字典列表。这让我觉得效率低下。我的问题是:你如何重写这个,以便原始的元组列表可以传递给模板(因此,保存一个步骤),同时仍然允许通过ie。,item [0]或类似的方式访问各个成员?< / p>

谢谢〜

Bubnoff

2 个答案:

答案 0 :(得分:0)

如果您使用的是Python 2.6或更高版本,则可以使用format字符串方法而不是%运算符。这允许您指定给定参数的索引:

>>> template = 'First value: {0}, Second value: {1}, First again: {0}'
>>> values = (123, 456)
>>> template.format(*values)
'First value: 123, Second value: 456, First again: 123'

答案 1 :(得分:0)

如果您使用new string formatting,则可以仅对索引进行操作......

但即使手头有数据库方案,破解也是可怕的。 dict列表方法听起来更加理智,除非你经常访问一个经常访问的服务,否则性能影响不会太差(这取决于数据集的大小 - 但是你没有得到3k 7 - 一下子,你呢?)。字典在Python中相当有效。缓存也可以帮助提高性能。