Как заменить элементы в списке с помощью поиска по словарю (список как значения в dict)

#python #list #dictionary

#python #Список #словарь

Вопрос:

С помощью моего кода я хотел бы вернуть ключ для каждого значения в списке значений dict. Для следующего кода я получаю 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
 

Ответ №1:

В вашем внутреннем цикле у вас есть оператор if-else, а в else вы добавляете «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)
            break
    else:
        category.append('unknown')
 

Ответ №2:

  1. или вы можете запустить этот код для достижения своей цели.
 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:
    node = False
    for k, v in dict_cat.items():
        if creditaccount in v:
            category.append(k)
            node = True
    if node == False:
        category.append('unknown')
    
            
category
 

Комментарии:

1. когда creditaccount в dict_cat, установите код true, и категория не будет добавлять ‘unknown’ к самому себе пробел

Ответ №3:

Я думаю, теперь это должно сработать,

Синтаксис кода

 for cat in dict_cat.keys():
    for creditaccount in creditaccounts:
        if creditaccount in dict_cat[cat]:
            category.append(cat)
        else:
            category.append('unknown')
 

Объяснение

То, что вы ищете, — это проверить creditaccounts значения в каждом list из dict_cat .

Если найдено значение, добавьте «ключ dict этого списка», иначе добавьте «неизвестный»,

Вывод

 ['unknown', 'unknown', 'unknown', 'self', 'unknown', 'unknown', 
'unknown', 'unknown', 'unknown', 'unknown', 'supermarket', 
'supermarket', 'unknown', 'unknown', 'unknown']

[Program finished]
 

Согласно этим результатам,

 self [list]: only element[3] found into the `creditsaccounts`.

Bank [list]: no value matched with the `creditsaccounts` list, so the whole values appeneded as 'unknown'.

supermarket [list]: its elements -> element[0], element[1].