gpt4 book ai didi

Python:仅当值是元组/列表而不是字符串时如何迭代

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:19 26 4
gpt4 key购买 nike

我目前正在尝试编写一个 python 脚本/小型应用程序,它应该读取事件,然后将它们转换为不同的格式。我还利用它来涉足面向对象编程,但我远非专家。

我正在尝试使用字典作为映射来定义源字段和翻译字段之间的映射。

但其中一个源字段(示例中的优先级)在输出中需要两次。

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

希望对您有所帮助。 :)

关于Python:仅当值是元组/列表而不是字符串时如何迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52554877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com