我目前正在尝试编写一个python脚本/小应用程序,该程序应该读取事件,然后将它们转换为不同的格式。
我也让我们在面向对象编程方面有所涉猎,但我远不是一个专家。
我试图使用字典作为映射来定义源字段和翻译字段之间的映射。
不过,其中一个源字段(示例中为priority)在输出中需要两次。

class event():
    def __init__(self, description, priority):
        self.description = description
        self.priority = priority

        pass

    _translateMap = {
       'description': 'message',
       'priority' : ('priority', 'severity')
    }

    def translate(self):
       result = {}
       for key, value in self._translateMap.items():
           for field in value:
               result[field] = getattr(self, key)

       return result

if __name__ == '__main__':
    event1 = event('blahblah','3')
    print event1.translate()

这将打印:
{'a': 'blahblah', 'e': 'blahblah', 'severity': '3', 'g': 'blahblah', 'm': 'blahblah', 'priority': '3', 's': 'blahblah'}
不过,我想要的是:
{'message': 'blahblah', 'severity': '3', 'priority': '3'}
我知道问题在于遍历“消息”的每个字符,但我不确定在解析多个输入值时,什么是避免这种情况的最佳方法?
或者我的期望是他们应该类似的工作是根本错误的?
如前所述,我还不是很有经验,所以如果你认为这种方法不合理,让我知道!
提前谢谢你,

最佳答案

有两种方法可以解决此问题,您可以将“消息”字符串设置为元组,因此您的_translateMap将如下所示:

_translateMap = {
    'description': ('message',),
    'priority' : ('priority', 'severity')
}

否则,每次都可以用isinstance检查类型,如下所示:
def translate(self):
    result = {}
    for key, value in self._translateMap.items():
        if isinstance(value,str):
            result[value] = getattr(self, key)
        else:
            for field in value:
                 result[field] = getattr(self, key)

    return result

我希望这能有帮助:)

08-20 03:40