高效查找和替换列表中的字符串Python

时间:2018-11-30 17:31:24

标签: python

我目前正在从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'
]

3 个答案:

答案 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']