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

时间:2015-08-01 23:43:42

标签: python if-statement text mapping tuples

如何改进此功能?

将所有搜索行放在文件中都应该是好的。重要的是它们按此顺序排列。我可以在使用时使用吗?

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

2 个答案:

答案 0 :(得分:2)

列出要找到的字符串和对应标签的对(元组)。

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

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'

当我使用Python 3时,我注释掉了encode()调用。

答案 1 :(得分: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

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