[英]How to iterate through Tuple<List<String>> in Python
[英]Python: how do I iterate only if value is a tuple/list and not a string
我目前正在嘗試編寫一個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'}
我知道問題是遍歷'消息'的每個字符,我不確定雖然仍然能夠解析多個輸入值的最佳方法是什么?
或者我期望他們應該同樣工作從根本上是錯誤的? 如上所述,我不是很有經驗,所以如果你認為這種方法沒有意義,請告訴我!
先感謝您,
有兩種方法可以解決這個問題,你可以將'message'字符串變成一個元組,所以_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
我希望這有幫助。 :)
您可以使用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
您不需要pass
init
dunder方法。 - 另外,縮寫是python最重要的方面,因為它根據后者解釋代碼。 - 您可以在不使用單引號(字符串)的情況下將數字傳遞給函數。
你可以做以下幾點:
def translate(self):
return {field: getattr(self, value) for value, field in self._translateMap.items()}
雖然我不明白為什么你將priority
字段設置為元組,但你可以這樣做:
class event():
_translateMap = {
'description': 'message',
'priority': 'priority',
'severity': 'severity'
}
def __init__(self, description, priority, severity):
self.description = description
self.priority = priority
self.severity = severity
def translate(self):
return {field: getattr(self, value) for value, field in self._translateMap.items()}
if __name__ == '__main__':
event1 = event('blahblah', 3, 5)
print(event1.translate())
注意如何將數字作為字符串傳遞,以及如果您想將檢查添加到translate
函數中。
我不確定您的用例,但這會打印出您想要的結果。 您不需要遍歷變量。 只需首先映射您想要的所有內容。
class event():
def __init__(self, description, priority):
self.description = description
self.priority = priority
self.severity = priority
pass
_translateMap = {
'description': 'message',
'priority' : 'priority',
'severity': 'severity'
}
def translate(self):
result = {}
for key, value in self._translateMap.items():
result[key] = getattr(self, key)
return result
if __name__ == '__main__':
event1 = event('blahblah','3')
print (event1.translate())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.