В dict1 ниже, как мне присвоить from_port значению «FromPort», если я не уверен, какой индекс будет в «IpPermissions»?

В приведенном ниже примере я могу использовать индекс, но это не всегда индекс 0.

from_port = dict1['IpPermissions'][0]['FromPort']

dict1 = {'Description': 'Some AWS security group', 'IpPermissions': [{'Cidr': '0.0.0.0/0', 'FromPort': '80', 'IpProtocol': 'TCP'}]}

-1
bayman 17 Фев 2020 в 07:47

2 ответа

Лучший ответ

Вы можете проверить, есть ли у каждого элемента в списке атрибут FromPort.

dict1 = {'Description': 'Some AWS security group', 'IpPermissions': [{'Cidr': '0.0.0.0/0', 'FromPort': '80', 'IpProtocol': 'TCP'}]}

ip_permissions = dict1['IpPermissions']
for perm in ip_permissions:
    if 'FromPort' in perm:
        from_port = perm['FromPort']

Примечание. это не относится к случаю, если в нем содержится более одного диктанта с 'FromPort'.

1
Dominic D 17 Фев 2020 в 04:53

Этот подход извлечет любой словарь из массива, который содержит ключ «FromPort».

tmp = [d for d in dict1['IpPermissions'] if 'FromPort' in d]
from_port = tmp[0]['FromPort']

Имейте в виду, что это не удастся, если отсутствует FromPort (tmp будет пустым) и, как и в случае с другим ответом, не затрагивает несколько записей, если у вас нет такой гарантии.

1
gph 17 Фев 2020 в 05:07