Краткий ответ: нет. Dicts не являются базами данных SQL, вы должны дать точный ключ.
Решение для грубой силы состоит в том, чтобы перебрать ключи dict и использовать строковые методы, чтобы найти соответствующие, то есть:
for key in tr_dict:
if key.startswith("UTABI-"):
print("found {} : {}".format(key, tr_dict[key]))
что, конечно, является O (n) и отчасти побеждает весь смысл наличия диктов. Это нормально, если вам нужно выполнить этот поиск только один раз для данного tr_dict
, но неоптимально, если tr_dict
имеет длительный срок службы и будет найден несколько раз для данного "частичного" ключа.
Другое решение, которое требует дополнительной предварительной обработки, но допускает последующий доступ O (1), состоит в том, чтобы предварительно обработать весь dict один раз, чтобы создать новый с ключами, которые можно искать напрямую:
from collections import defaultdict
lookups = [
# (key: callback)
("UTABI", lambda k: k.startswith("UTABI-")),
("DERIG", lambda k: k.endswith("-DERIG")),
]
index = defaultdict(list)
for newkey, match in lookups:
for oldkey in tr_dict:
if match(oldkey):
index[newkey].append(tr_dict[oldkey])
Это перебор для одноразового поиска, но гораздо лучше, если вам приходится искать эти ключи более одного раза для данного tr_dict.