В настоящее время я собираю список из 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'
]
Вы можете использовать словарь:
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']
priname
существует не более одной замены на элемент, и что элементы идеально соответствуют priname
. Я думаю, что мы можем предположить, что учитывая структуру примера OP, так что +1
table.get(e, e)
над table[e]
будет возвращать исходную строку, если нет замены.
Вы можете использовать словарь и назначить несколько значений для каждого ключа:
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']
Одна идея, которая приходит на ум, состоит в том, чтобы вместо использования цикла for преобразовать список в массив numpy и использовать функцию numpy.where:
w = numpy.array(w)
ind = numpy.where(w==list_elements_you_are_looking_for)
w[ind] = new_value
[... for x in ...]
) вместоlist()
+ генераторное выражение. Это больше Pythonic.data
илиpriname
чтобы мы могли видеть, с чем мы работаем?