Я бы использовал проверку диапазона с any
.Вот аккуратная функция генератора многократного использования:
def get_keys_in_range(dct, lo=0, hi=100):
rng = range(lo, hi)
for key, lst in dct.items():
if any(l in rng for l in lst):
yield key
[*get_keys_in_range(new_dict, lo=0, hi=100)]
# ['worry', 'win']
Стоит отметить, что проверки членства на range
объектах имеют постоянное время (O (1)) в python-3.x (ноO (N) в python-2.x, поэтому вы можете рассмотреть другие решения, используя чистые сравнения).
Обратите внимание, что диапазон закрыт в нужном интервале, что означает, что вы хотите сделать range(lo, hi+1)
, если вы хотите, чтобы верхняя граница была включающей.
Это можно сократить до
lo, hi = 0, 100
[key for key, lst in new_dict.items() if any(l in range(lo, hi) for l in lst)]
# ['worry', 'win']
Вы можете предварительно кэшировать range
для немного большей производительности (каксделано внутри функции).
rng = range(lo, hi)
[key for key, lst in new_dict.items() if any(l in rng for l in lst)]
# ['worry', 'win']