在python中用loop而不是if语句映射值

2024-06-01 06:36:26 发布

您现在位置:Python中文网/ 问答频道 /正文

如何改进此功能?你知道吗

将所有的搜索行都放在一个文件中应该是很好的。重要的是,他们是在这个顺序。我可以用while还是?你知道吗

def findlarm(text):
    """
    Lookijng for a lable to put on map
    :param text:
    :return:

    """
    if text.lower().find('brand i byggnad industri') >= 0:
        label = 'Brand i byggnad industri'
    elif text.lower().encode('utf8').find('trafikolycka påkörd person') >= 0:
        label = 'Trafikolycka påkörd person'
    elif text.lower().find('trafikolycka') >= 0:
        label = 'Trafikolycka'
    elif text.lower().find('brand i byggnad') >= 0:
        label = 'Brand i byggnad'
    elif text.lower().encode('utf8').find('röklukt') >= 0:
        label = 'Röklukt'
    elif text.lower().encode('utf8').find('Brand ute - terräng Gräsbrand') >= 0:
        label = 'Gräsbrand'
    elif text.lower().encode('utf8').find('Utsläpp farligt ämne') >= 0:
        label = 'Utsläpp farligt ämne'
    elif text.lower().encode('utf8').find('brand ute - övrigt') >= 0:
        label = 'Brand ute - övrigt'
    elif text.lower().encode('utf8').find('sjukvårdslarm') >= 0:
        label = 'Sjukvårdslarm'
    elif text.lower().encode('utf8').find('passning') >= 0:
        label = 'Passning station'
    elif text.lower().find('annat') >= 0:
        label = 'Annat larm'
    elif text.lower().find('skogsbrand') >= 0:
        label = 'Skogsbrand'
    elif text.lower().find('drunkning') >= 0:
        label = 'Drunkning'
    elif text.lower().find('fartyg') >= 0:
        label = 'Fartyg/Båtolycka'
    elif text.lower().find('ivpa') >= 0:
        label = 'IVPA'
    elif text.lower().find('automatiskt brandlarm') >= 0:
        label = 'Aut Brandlarm'
    elif text.lower().find('sjukdomsfall') >= 0:
        label = 'Sjukdomsfall'
    elif text.lower().find('brand') >= 0:
        label = 'Brand'
    elif text.lower().find('trauma') >= 0:
        label = 'Trauma'
    elif text.lower().encode('utf8').find('Järnväg - påkörd person') >= 0:
        label = 'Järnväg - påkörd person'
    elif text.lower().encode('utf8').find('övrigt ambulansassistans') >= 0:
        label = 'Ambulansassistans'
    else:
        label = 'Okänt larm'
    return label

Tags: textreturnrdutf8findlowerlabelencode
2条回答

可以使用for循环,但我认为这是使用for-in循环以及字符串方法capitalize()的好地方:

mylist = [
    'brand i byggnad industri',
    'trafikolycka påkörd person',
    # etc.
]

label = None
for term in mylist:
    if text.lower().encode('utf8').find(term) >= 0:
        label = term.capitalize()
        break
return label  # returns None if none of the terms were found

编辑:正如另一个用户指出的,并非所有标签都是要查找的文本的大写版本。如果你需要不同的标签,那么另一个答案更好。你知道吗

列一个成对(元组)的列表,其中包含要查找的字符串和相应的标签。你知道吗

然后遍历该列表,直到找到匹配项,选择相应的标签并中断(或直接返回)。下面是示例代码:

def findlarm(text):
    labels = [('foo', 'bar'), ('hans', 'wurst')]

    test = text.lower() #.encode('utf8')
    for l in labels:
        if test.find(l[0]) >= 0:
            return l[1]

    return 'Okänt larm'

我在使用Python3时注释掉了encode()调用。你知道吗

相关问题 更多 >