if-elif-else语句(>10行),如何缩短?我们可以使用字典作为替代吗? [重复]

问题描述 投票:0回答:1

我正在编写一个预算函数。这部分将为用户的输入项目分配一个类别。

该功能有效,但是当我回来查看我的代码时。我想知道如何使这个 if-elif-else 语句更短。

这部分的

我的目标获取输入项的类别名称。如果输入未在那里列出,则应将其标记为“其他”

desc = input("what have you spent on? ")

if desc in ['cloth', 'watch', 'shoes', 'shirt', 'pants','skirt', 'dress', 'hat']:
    cat = 'shopping'
elif desc in ['lidl', 'kaufland', 'food', 'veggies', 'meat', 'eggs', 'milk']:
    cat = 'food & grocery'
elif desc in ['meals', 'drink','coffee','bakery', 'cake']:
    cat = 'bar & restaurants'
elif desc in ['bus', 'flight','train','transport','car']:
    cat = 'transport & car'
elif desc in ['rent']:
    cat = 'rent'
elif desc in ['withdraw', 'cash']:
    cat = 'cash'
elif desc in ['ATM']:
    cat = 'ATM'
elif desc in ['accommodation','room','hostel','hotel']:
    cat = 'travel'
elif desc in ['internet']:
    cat = 'household & utilities'
elif desc in ['rossmann', 'dm']:
    cat = 'healthcare & drug'     
elif desc in ['donation']:
    cat = 'giving'       
else:
    cat = 'other'

我研究并尝试了一些解决方案,但我不知道如何使其发挥作用。 我一直在尝试使用字典(如下所示),但我无法正确使用。

desc=input("what have you spent on? ")
cat_dict = {'shopping': ['cloth', 'watch', 'shoes', 'shirt', 
                         'pants','skirt', 'dress', 'hat', 'H&M', 'C&A', 'Zalando'],
            'food & grocery': ['lidl', 'kaufland', 'food', 
                               'veggies', 'meat', 'eggs', 'milk'],
            'bar & restaurants':['meals', 'drink','coffee','bakery', 'cake'],
            'transport & car':['bus', 'flight','train','transport','taxi'],
            'rent':['rent'],
            'cash':['withdraw', 'cash'],
            'ATM':['ATM'],
            'travel':['accommodation','room','hostel','hotel'],
            'household & utilities':['internet'],
            'healthcare & drug':['rossmann', 'dm'],
            'giving' :['donation']
           } 
for key, val in cat_dict.items():
    if desc in val:
        category = key
        return category
    else:
        category='other'
        return category

我希望它返回“键”作为类别。 但是,例如,如果我输入“出租车”,它会返回“其他”而不是“交通和汽车”。

python dictionary if-statement conditional-statements
1个回答
0
投票

反转你的 cat_dic:

inv_cat_dict = {}
for k,v in cat_dict.items():
    for x in v:
        inv_cat_dict.setdefault(x, []).append(k)
print(inv_cat_dict)

© www.soinside.com 2019 - 2024. All rights reserved.