У меня есть диктант, который выглядит следующим образом:
{attribute_1 : True,
attribute_2 : False,
attribute_3 : 'foo', # Can be one of multiple text options here
attribute_4 : 5,} # Can be one of multiple numerical options here
Мне нужно преобразовать его так, чтобы каждое значение было логическим, таким образом давая:
{attribute_1 : True,
attribute_2 : False,
attribute_3_foo : True,
attribute_4_5 : True}
(one-hotкодирование для машинного обучения, на случай, если кому-то все равно, почему я делаю такие странные вещи. Обрабатывает много-много таких словарей ...).
Я нашел работающее решение - выполнить цикл forДикт для поиска небулевых значений и (1) создания новых записей, затем (2) удаления чего-либо с не-булевым ключом.Это хорошо, но это кажется не элегантным и неэффективной памятью, поскольку мой список - новый объект в памяти.Есть ли лучший способ сделать это?
# List loop to insert ('k,v in dict' won't let you add/delete items)
for x in list(sub_d.items()):
if type(x[1]) is not bool:
sub_d[x[0]+'_'+ str(x[1])] = True
del sub_d[x[0]]
PS.Понимание списка не работает, так как я не могу найти способ подать достаточно сложную операцию, чтобы выполнить работу.Кроме того, я не думаю, что они получат какой-либо выигрыш в эффективности по сравнению с моим текущим решением?