Как получить значение словаря отфильтровав ключ по окончанию строки?

Всем привет. В словаре бывают (одно из) room_given_exp, dungeon_given_exp, path_given_exp и т.п. Ключи оканчивающиеся на _given_exp. Помимо них в словаре есть и другие ключи. Мне нужно достать значение из словаря отфильтровав его по окончанию строки _given_exp

Как это можно сделать? Задача заключается в том, чтобы получить ключ с _given_exp, а потом обратиться к словарю по этому ключу


Ответы (2 шт):

Автор решения: GrAnd

Если ключ только один, то быстрее перебрать пока этот ключ не найдётся.

def get_key_by_suffix(d, suffix):
    for key in d:
        if key.endswith(suffix):
            return key
    return None
    
dd = {"foo": -500,
      "room_given_exp": 42,
      "xxx": "yyy"}

print(get_key_by_suffix(dd, "_given_exp"))

Если ключей больше одного, но можно создать новый словарь, куда отфильтровать нужные ключи.

dd_filtered = {k: v for k, v in dd.items() if k.endswith("_given_exp")}
print(dd_filtered)
→ Ссылка
Автор решения: lazovikovartyom

Нашёл решение. Отсортировал ключи по endswith и забрал 0 индекс из списка.

def get_exp_quantity(fields: dict) -> int:
    """
    This method returns exp quantity
    it filters dict keys by endswith
    '_given_exp'
    """
    key = [key for key in fields.keys() if key.endswith('_given_exp')][0]
    quantity = fields[key]
    return quantity
→ Ссылка