首页 > 解决方案 > 如何使用字典查找替换列表中的元素(列表作为字典中的值)

问题描述

使用我的代码,我想返回字典值列表中每个值的键。对于以下代码,我得到的category返回列表比我的creditaccounts列表长。期望的结果是:

category = ['supermarket', 'supermarket', 'unknown', 'self', 'unknown']

我与循环和“未知”元素作斗争。

creditaccounts = ['ALBERT HEIJN 1654 ROTTERDAM NLD', 'Jumbo 199730 TILBURG NLD','10-04-14 22:38 GELDAUTOMAAT', 'ING Bank', 'Desposit']

self = ['ING Bank', 'Van Bonusrenterekening']
bank = ['Kosten OranjePakket']
supermarket = ['ALBERT HEIJN 1654 ROTTERDAM NLD', 
                'Jumbo 199730 TILBURG NLD', 'Albert Heijn 1617', 
                'Jumbo Rotterdam ROTTERDAM NLD',
                'DIRK VDBROEK FIL4014 ROTTERDAM']

dict_cat = {'self' : self
            ,'bank' : bank
            , 'supermarket': supermarket}

category = []

for creditaccount in creditaccounts:
    for cat, val in dict_cat.items():
        if creditaccount in val:
            category.append(cat)
        else:
            category.append('unknown')
            
category

标签: pythonlistdictionary

解决方案


在您的内部循环中,您有一个 if-else 语句,而在 else 中,您将“未知”附加到您的列表中。如果条件不匹配,这会导致每次迭代都附加“未知” 。
尝试跳出循环和其他:

creditaccounts = ['ALBERT HEIJN 1654 ROTTERDAM NLD', 'Jumbo 199730 TILBURG NLD','10-04-14 22:38 GELDAUTOMAAT', 'ING Bank', 'Desposit']

self = ['ING Bank', 'Van Bonusrenterekening']
bank = ['Kosten OranjePakket']
supermarket = ['ALBERT HEIJN 1654 ROTTERDAM NLD', 
                'Jumbo 199730 TILBURG NLD', 'Albert Heijn 1617', 
                'Jumbo Rotterdam ROTTERDAM NLD',
                'DIRK VDBROEK FIL4014 ROTTERDAM']

dict_cat = {'self' : self
            ,'bank' : bank
            , 'supermarket': supermarket}

category = []

for creditaccount in creditaccounts:
    for cat, val in dict_cat.items():
        if creditaccount in val:
            category.append(cat)
            break
    else:
        category.append('unknown')

推荐阅读