加载包含对象内容的列表

时间:2010-12-08 15:13:22

标签: python

我有一个无法被simplejson转储的对象,所以我需要先从它创建一个列表。目前这就是我正在使用的:

    messages = h.flash.pop_messages()
    items = []
    for message in messages:
        item = {}
        item['category'] = message.category
        item['message'] = message.message
        items.append(item)

我觉得我有更多的pythonic方法可以做到这一点,任何人都可以解决这些问题吗?

修改

根据要求,这是Message对象的类:

class Message(object):
    """A message returned by ``Flash.pop_messages()``.

    Converting the message to a string returns the message text. Instances
    also have the following attributes:

    * ``message``: the message text.
    * ``category``: the category specified when the message was created.
    """

    def __init__(self, category, message):
        self.category=category
        self.message=message

    def __str__(self):
        return self.message

    __unicode__ = __str__

    def __html__(self):
        return escape(self.message)

2 个答案:

答案 0 :(得分:5)

items = [{'category': m.category, 'message': m.message}
  for m in h.flash.pop_messages()]

答案 1 :(得分:0)

如果可以,那么只需从对象

获取继承消息

object提供了一个__dict__属性,它是对象的所有实例属性的字典(而不是类属性或继承的属性)。如果您需要稍后向消息添加更多属性,则使用此方法将使您的代码不太可能中断。

class Message(object):

   classAttribute = None # will not feature in __dict__

   def __init__(self,category,message):
      self.category = category
      self.message = message

messages = h.flash.pop_messages()
items = [message.__dict__ for message in messages]