我目前正在从api下拉列表,并根据严重性级别更改名称
现在我要做的代码是
priname = list((item['fields']['priority']['name']) for item in data['issues'])
priname = [w.replace('Trivial', 'Low')
.replace('Minor', 'Low')
.replace('Moderate', 'Medium')
.replace('Major', 'High')
.replace('Critical', 'High')
.replace('Blocker', 'Emergency')for w in priname]
因此,我只是将列表中的字符串替换为概括内容的关键字。当我对较大的列表执行此操作时,要花很长时间才能返回修改后的列表,我意识到这根本不是一种有效的方法。
有人能指出我可以简化此查找和替换的方向吗?
编辑:
Priname=[
'Critical',
'Moderate',
'Major',
'Moderate',
'Moderate',
'Critical',
'Moderate',
'Moderate',
'Moderate',
'Blocker',
'Critical',
'Moderate',
'Moderate',
'Major',
'Moderate',
'Critical'
]
答案 0 :(得分:6)
您可以使用dictionary:
priname = [
'Critical',
'Moderate',
'Major',
'Moderate',
'Moderate',
'Critical',
'Moderate',
'Moderate',
'Moderate',
'Blocker',
'Critical',
'Moderate',
'Moderate',
'Major',
'Moderate',
'Critical'
]
table = {'Trivial': 'Low',
'Minor': 'Low',
'Moderate': 'Medium',
'Major': 'High',
'Critical': 'High',
'Blocker': 'Emergency'}
result = [table[e] for e in priname]
print(result)
输出
['High', 'Medium', 'High', 'Medium', 'Medium', 'High', 'Medium', 'Medium', 'Medium', 'Emergency', 'High', 'Medium', 'Medium', 'High', 'Medium', 'High']
答案 1 :(得分:1)
想到的一个主意是,而不是使用for循环,将列表转换为numpy数组并使用numpy.where函数:
w = numpy.array(w)
ind = numpy.where(w==list_elements_you_are_looking_for)
w[ind] = new_value
答案 2 :(得分:1)
您可以使用字典并为每个键分配多个值:
replacements = {'Low': ['Trivial','Minor'], 'Medium': ['Moderate'], 'High': ['Major','Critical'], 'Emergency': ['Blocker']}
Priname=['Critical','Moderate','Major','Moderate','Moderate', 'Critical', 'Moderate', 'Moderate',
'Moderate', 'Blocker', 'Critical', 'Moderate', 'Moderate', 'Major', 'Moderate', 'Critical']
Priname = [k for i in Priname for k, v in replacements.items() if i in v]
返回:
['High', 'Medium', 'High', 'Medium', 'Medium', 'High', 'Medium', 'Medium', 'Medium', 'Emergency', 'High', 'Medium', 'Medium', 'High', 'Medium', 'High']