Похоже, ОП получили то, что хотели, но это в основном напечатано, так что я могу его опубликовать. Если идея состоит в том, чтобы работать с ярлыками , тогда принятый ответ может привести к странным результатам.
Например:
>>> d = {'docs': ['2_at', '2_hat', '34_b', '4_c', '32_bat']}
>>> search = ['at', '4']
>>> [val for val in d['docs'] if any(s in val for s in search)]
['2_at', '2_hat', '34_b', '4_c', '32_bat']
Вместо этого вы можете разделить каждый элемент:
>>> d = {'docs': ['2_at', '2_hat', '34_b', '4_c', '32_bat']}
>>> search = ['at', '4']
>>> [val for val in d['docs'] if any(s in val.split('_') for s in search)]
['2_at', '4_c']