Извлечение строк из dict

Я пытаюсь получить сетевые интерфейсы, созданные в EC2, и из-за этого я использую функцию «describe_network_interfaces» из boto3. Вывод этой функции представляет собой структуру, подобную этой:

{
    'NetworkInterfaces': [
        {
            'Association': {
                'AllocationId': 'string',
                'AssociationId': 'string',
                'IpOwnerId': 'string',
                'PublicDnsName': 'string',
                'PublicIp': 'string',
                'CustomerOwnedIp': 'string',
                'CarrierIp': 'string'
            },
            'Attachment': {
                'AttachTime': datetime(2015, 1, 1),
                'AttachmentId': 'string',
                'DeleteOnTermination': True|False,
                'DeviceIndex': 123,
                'NetworkCardIndex': 123,
                'InstanceId': 'string',
                'InstanceOwnerId': 'string',
                'Status': 'attaching'|'attached'|'detaching'|'detached',
                'EnaSrdSpecification': {
                    'EnaSrdEnabled': True|False,
                    'EnaSrdUdpSpecification': {
                        'EnaSrdUdpEnabled': True|False
                    }
                }
            },
            'AvailabilityZone': 'string',
            'Description': 'string',
            'Groups': [
                {
                    'GroupName': 'string',
                    'GroupId': 'string'
                },
            ],
            'InterfaceType': 'interface'|'natGateway'|'efa'|'trunk'|'load_balancer'|'network_load_balancer'|'vpc_endpoint'|'branch'|'transit_gateway'|'lambda'|'quicksight'|'global_accelerator_managed'|'api_gateway_managed'|'gateway_load_balancer'|'gateway_load_balancer_endpoint'|'iot_rules_managed'|'aws_codestar_connections_managed',
            'Ipv6Addresses': [
                {
                    'Ipv6Address': 'string'
                },
            ],
            'MacAddress': 'string',
            'NetworkInterfaceId': 'string',
            'OutpostArn': 'string',
            'OwnerId': 'string',
            'PrivateDnsName': 'string',
            'PrivateIpAddress': 'string',
            'PrivateIpAddresses': [
                {
                    'Association': {
                        'AllocationId': 'string',
                        'AssociationId': 'string',
                        'IpOwnerId': 'string',
                        'PublicDnsName': 'string',
                        'PublicIp': 'string',
                        'CustomerOwnedIp': 'string',
                        'CarrierIp': 'string'
                    },
                    'Primary': True|False,
                    'PrivateDnsName': 'string',
                    'PrivateIpAddress': 'string'
                },
            ],
            'Ipv4Prefixes': [
                {
                    'Ipv4Prefix': 'string'
                },
            ],
            'Ipv6Prefixes': [
                {
                    'Ipv6Prefix': 'string'
                },
            ],
            'RequesterId': 'string',
            'RequesterManaged': True|False,
            'SourceDestCheck': True|False,
            'Status': 'available'|'associated'|'attaching'|'in-use'|'detaching',
            'SubnetId': 'string',
            'TagSet': [
                {
                    'Key': 'string',
                    'Value': 'string'
                },
            ],
            'VpcId': 'string',
            'DenyAllIgwTraffic': True|False,
            'Ipv6Native': True|False,
            'Ipv6Address': 'string'
        },
    ],
    'NextToken': 'string'
}

Как я могу получить только значение из «NetworkInterfaceId» и поместить его в список? Я пытался извлечь это значение с помощью регулярного выражения, но у меня пока нет больших навыков в этом. Не могли бы вы, ребята, помочь мне, пожалуйста?

Что ты уже испробовал?

JonSG 10.01.2023 15:17

Вы знаете, как работают дикторы? mydict["Сетевые интерфейсы"]...

Alex_X1 10.01.2023 15:18

@ Alex_X1 данные не совсем правильный словарь

JonSG 10.01.2023 15:23

Если бы данные были действительным словарем, вы могли бы сделать print([x["NetworkInterfaceId"] for x in data["NetworkInterfaces"]])

JonSG 10.01.2023 15:24

@JonSG да, это правда, но в заголовке он ссылается на диктовку, так что я думаю, что это действительная диктовка

Alex_X1 10.01.2023 15:25
Потяните за рычаг выброса энергососущих проектов
Потяните за рычаг выброса энергососущих проектов
На этой неделе моя команда отменила проект, над которым я работал. Неделя усилий пошла насмарку.
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
2
5
70
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Mydict['NetworkInterfaces'][0]['NetworkInterfaceId']

А когда у меня более 1 NetworkInterfaceId? Эта структура может дублироваться, понимаете?

Hernandes Matias Junior 10.01.2023 15:23
Ответ принят как подходящий

Чтобы получить значение из словаря, вам нужно «перейти» к нему. Например:

my_network_interface_id = my_dict["NetworkInterfaces"][0]["NetworkInterfaceId"]

Нам нужен 0, чтобы получить первый элемент массива. Вы также можете взглянуть на ответ @JonSG.

А когда у меня более 1 NetworkInterfaceId? Эта структура может дублироваться, понимаете?

Hernandes Matias Junior 10.01.2023 15:23

Если есть несколько значений, он должен получить список из словаря или набор, я не совсем уверен

Alex_X1 10.01.2023 15:27

Если для my_dict заданы предоставленные данные, это приведет к ошибке, поскольку предоставленные данные не приводят к правильному диктованию. TypeError: unsupported operand type(s) for |: 'str' and 'str'

JonSG 10.01.2023 15:27

Я знаю, и я заметил, что это может быть ошибка автора, мой ответ должен работать в случае, если дикт действителен

Alex_X1 10.01.2023 15:28

Конечно вещь. Поскольку ОП хочет «список», вы можете добавить понимание списка, которое я указал в комментариях выше.

JonSG 10.01.2023 15:30

Какой работал? Мои или @JonSG

Alex_X1 10.01.2023 15:56

Ваш код, Алекс

Hernandes Matias Junior 10.01.2023 16:12

Я рад, что смог помочь, если вы довольны моим ответом, обязательно примите его.

Alex_X1 11.01.2023 11:22

Вы можете использовать сокращение для этого

network_interfaces = [interface["NetworkInterfaceId"] for interface in response["NetworkInterfaces"]]

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