Как получить значение словаря отфильтровав ключ по окончанию строки?
Всем привет. В словаре бывают (одно из) 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