我正在编写一个预算函数。这部分将为用户的输入项目分配一个类别。
该功能有效,但是当我回来查看我的代码时。我想知道如何使这个 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
我希望它返回“键”作为类别。 但是,例如,如果我输入“出租车”,它会返回“其他”而不是“交通和汽车”。
反转你的 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)