为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2021-09-02 16:14:45
我目前正在从 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 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

你可以使用字典:


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



查看完整回答
反对 回复 2021-09-02
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

您可以使用字典并为每个键分配多个值:


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



查看完整回答
反对 回复 2021-09-02
?
临摹微笑

TA贡献1982条经验 获得超2个赞

想到的一个想法是,而不是使用 for 循环,将列表转换为 numpy 数组并使用 numpy.where 函数:


    w = numpy.array(w)

    ind = numpy.where(w==list_elements_you_are_looking_for)

    w[ind] = new_value


查看完整回答
反对 回复 2021-09-02
  • 3 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信