Как получить доступ к вложенному словарю с помощью кортежа

У меня есть вложенный словарь, к которому я хочу получить доступ через кортеж. Как это сделать?

    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

Вам придется создать подкласс dict и перезаписать __getitem__, чтобы обрабатывать кортежи ключей. Альтернативно, вы можете просто использовать логику, с помощью которой вы перезапишете __getitem__.

OysterShucker 27.07.2024 19:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого вы можете создать вспомогательную функцию (назовем ее 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"

Другие вопросы по теме