Как получить определенные ключи и их значения из вложенного словаря в python?

Мне нужна помощь, пожалуйста, будьте добры, я новичок. У меня есть вложенный дикт:

dict_ = {
 "timestamp": "2022-11-18T10: 10: 49.301Z",
 "name" : "example",
 "person":{
    "birthyear": "2002"
    "birthname": "Examply"
 },
 "order":{
    "orderId": "1234"
    "ordername": "onetwothreefour"
 }
}

Как мне получить новый дикт, например:

new_dict = {"timestamp": "2022-11-18T10: 10: 49.301Z", "birthyear": "2002", "birthname": "Examply", "orderId": "1234"} 

Я попробовал обычные вещи, которые я мог найти в Google. Но я нашел только такие решения, как получение значений без ключей или это работает только для плоских диктов. Последнее, что я пробовал:

new_dict = {key: msg[key] for key in msg.keys() & {'timestamp', 'birthyear', 'birthname', 'orderId'}

Это не работает для вложенного dict. Может у кого есть простой вариант.

Если путь (ключи) к значениям всегда один и тот же, вы можете получить к ним прямой доступ

Dani Mesejo 21.11.2022 10:23

Я пытался, но в основном я получаю только значения или это работает только для плоских диктов. Может быть, у вас есть пример кода?

JazCodes 21.11.2022 10:25
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
3
2
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Общий подход:

dict_ = {
    "timestamp": "2022-11-18T10: 10: 49.301Z",
    "name": "example",
    "person": {
        "birthyear": "2002",
        "birthname": "Examply"
    },
    "order": {
        "orderId": "1234",
        "ordername": "onetwothreefour"
    }
}


def nested_getitem(d, keys):
    current = d
    for key in keys:
        current = current[key]
    return current


new_dict = {"timestamp": nested_getitem(dict_, ["timestamp"]),
            "birthyear": nested_getitem(dict_, ["person", "birthyear"]),
            "birthname": nested_getitem(dict_, ["person", "birthname"]),
            "orderId": nested_getitem(dict_, ["order", "orderId"]),
            }
print(new_dict)

Вывод

{'timestamp': '2022-11-18T10: 10: 49.301Z', 'birthyear': '2002', 'birthname': 'Examply', 'orderId': '1234'}

Большое спасибо, это решило мою проблему! Я не знал, как получить к нему прямой доступ.

JazCodes 21.11.2022 10:48
dict_ = {
 "timestamp": "2022-11-18T10: 10: 49.301Z",
 "name" : "example",
 "person":{
    "birthyear": "2002",
    "birthname": "Examply"
 },
 "order":{
    "orderId": "1234",
    "ordername": "onetwothreefour"
 }
}


def get_new_dict(valid_dict):
    new_dict = {'timestamp': valid_dict['timestamp'],
                'birthyear': valid_dict['person']['birthyear'], 
                'birthname': valid_dict['person']['birthname'], 
                'orderId': valid_dict['order']['orderId']
               }
    
    return new_dict
    
new_dict = get_new_dict(dict_)

print(new_dict)

вывод:

{'timestamp': '2022-11-18T10: 10: 49.301Z', 'birthyear': '2002', 'birthname': 'Examply', 'orderId': '1234'}

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