У Стивена Рауха хорошая идея.Вот несколько более краткая версия того, что он написал, используя dict.get
.
matches = {'num': 'numerical', 'cat': 'categorical'}
result = {k : matches.get(k[:3], 'unknown') for k in items}
print(result)
{'cat1': 'categorical',
'cat2': 'categorical',
'cat3': 'categorical',
'number1': 'numerical',
'number2': 'numerical',
'number3': 'numerical'}
Если вы хотите удалить значения, которые не совпадают, внесите небольшую модификацию:
result = {k : matches[k[:3]] for k in items if k[:3] in matches}
Вот мое мнение.Сначала отсортируйте items
, а затем найдите индекс разрыва.
items.sort()
for i, l in enumerate(items):
if l.startswith('num'):
break
result = dict.fromkeys(items[:i], 'categorical')
result.update(dict.fromkeys(items[i:], 'numerical'))
Лучше всего подходит только для двух классов значений.
print(result)
{'cat1': 'categorical',
'cat2': 'categorical',
'cat3': 'categorical',
'number1': 'numerical',
'number2': 'numerical',
'number3': 'numerical'}