#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:
- или вы можете запустить этот код для достижения своей цели.
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].