У меня есть вложенный словарь, к которому я хочу получить доступ через кортеж. Как это сделать?
my_dict = {
"1": { "a": "hi", "b": "bye" },
"2": { "a": { "i": "howdy"}}
}
# Way 1: Works
my_dict["1"]["b"] # prints "bye"
my_dict["2"]["a"]["i"] # prints "howdy"
# Way 2: Doesn't Work
my_dict[("1", "b")] # fails
my_dict(("2", "a", "i")) # fails
Для этого вы можете создать вспомогательную функцию (назовем ее nested_get
).
my_dict = {"1": {"a": "hi", "b": "bye"}, "2": {"a": {"i": "howdy"}}}
from functools import reduce
def nested_get(dictionary, keys):
return reduce(lambda a, x: a[x], keys, dictionary)
assert nested_get(my_dict, ("1", "b")) == "bye"
assert nested_get(my_dict, ("2", "a", "i")) == "howdy"
Вам придется создать подкласс
dict
и перезаписать__getitem__
, чтобы обрабатывать кортежи ключей. Альтернативно, вы можете просто использовать логику, с помощью которой вы перезапишете__getitem__
.