Reputation: 3958
I am currently bringing a list down from an api and changing the names based on severity levels
Right now my code to do this is
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]
So I am just replacing strings in the list to keywords that generalize the content. When I do this to larger lists, it takes forever to return the altered list which i realize means this is not an efficient way of doing this at all.
Can anyone point me in a direction where i can streamline this find and replace?
EDIT:
Priname=[
'Critical',
'Moderate',
'Major',
'Moderate',
'Moderate',
'Critical',
'Moderate',
'Moderate',
'Moderate',
'Blocker',
'Critical',
'Moderate',
'Moderate',
'Major',
'Moderate',
'Critical'
]
Upvotes: 1
Views: 432
Reputation: 9019
You can use a dictionary and assign multiple values for each key:
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]
Returns:
['High', 'Medium', 'High', 'Medium', 'Medium', 'High', 'Medium', 'Medium', 'Medium', 'Emergency', 'High', 'Medium', 'Medium', 'High', 'Medium', 'High']
Upvotes: 1
Reputation:
One idea that comes to mind is to, rather than using a for loop, convert the list into a numpy array and use the numpy.where function:
w = numpy.array(w)
ind = numpy.where(w==list_elements_you_are_looking_for)
w[ind] = new_value
Upvotes: 1
Reputation: 61910
You could use a 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)
Output
['High', 'Medium', 'High', 'Medium', 'Medium', 'High', 'Medium', 'Medium', 'Medium', 'Emergency', 'High', 'Medium', 'Medium', 'High', 'Medium', 'High']
Upvotes: 6