无法访问boto3中的词典数据

2024-06-06 07:23:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我用的是boto3,我运行了这个循环:

for i in x["Instances"]
   print(i)

然后我得到:

{
    'AmiLaunchIndex': 0,
    'Hypervisor': 'xen',
    'VpcId': 'vpc-a790ac1',
    'Architecture': 'x86_64',
    'InstanceId': 'i-0bab3fb8314',
    'PrivateDnsName': 'ip-10-c2.internal',
    'BlockDeviceMappings': [{
        'Ebs': {
            'DeleteOnTermination': True,
            'AttachTime': datetime.datetime(2017, 4, 4, 20, 44, 27, tzinfo = tzutc()),
            'VolumeId': 'vol-07fd506f45',
            'Status': 'attached'
        },
        'DeviceName': '/dev/xvda'
    }, {
        'Ebs': {
            'DeleteOnTermination': False,
            'AttachTime': datetime.datetime(2017, 4, 6, 1, 12, 45, tzinfo = tzutc()),
            'VolumeId': 'vol-01ef36c45',
            'Status': 'attached'
        },
        'DeviceName': '/dev/sdf'
    }],
    'RootDeviceName': '/dev/xvda',
    'InstanceType': 't2.micro',
    'EnaSupport': True,
    'ClientToken': 'ODrMT1465413',
    'EbsOptimized': False,
    'SubnetId': 'subnet-fb1a4',
    'Monitoring': {
        'State': 'disabled'
    },
    'PublicDnsName': '',
    'StateTransitionReason': 'User initiated (2017-04-06 01:15:22 GMT)',
    'PrivateIpAddress': '10.10.4.116',
    'RootDeviceType': 'ebs',
    'Tags': [{
        'Value': 'wp2',
        'Key': 'Name'
    }, {
        'Value': 'true',
        'Key': 'backup'
    }],
    'ImageId': 'ami-0976f01f',
    'StateReason': {
        'Code': 'Client.UserInitiadShutdown',
        'Message': 'Client.UserInitiatedShutdown: User initiated shutdown'
    },
    'KeyName': 'pair2',
    'ProductCodes': [],
    'State': {
        'Name': 'stopped',
        'Code': 80
    },
    'LaunchTime': datetime.datetime(2017, 4, 6, 1, 13, 1, tzinfo = tzutc()),
    'Placement': {
        'AvailabilityZone': 'us-east-1b',
        'GroupName': '',
        'Tenancy': 'default'
    },
    'SourceDestCheck': True,
    'NetworkInterfaces': [{
        'Description': 'Primary network interface',
        'PrivateIpAddress': '10.10.4.116',
        'PrivateIpAddresses': [{
            'Primary': True,
            'PrivateIpAddress': '10.10.4.116'
        }],
        'Status': 'in-use',
        'SubnetId': 'subnet-ffbcba4',
        'VpcId': 'vpc-a790a7c1',
        'Attachment': {
            'DeleteOnTermination': True,
            'AttachTime': datetime.datetime(2017, 4, 4, 20, 44, 26, tzinfo = tzutc()),
            'DeviceIndex': 0,
            'AttachmentId': 'eni-attach-c8398',
            'Status': 'attached'
        },
        'Ipv6Addresses': [],
        'OwnerId': '895548',
        'MacAddress': '0e:31:4c4:b6',
        'Groups': [{
            'GroupId': 'sg-26c59',
            'GroupName': 'web-dmz'
        }],
        'NetworkInterfaceId': 'eni-5383',
        'SourceDestCheck': True
    }],
    'SecurityGroups': [{
        'GroupId': 'sg-2cab59',
        'GroupName': 'web-dmz'
    }],
    'VirtualizationType': 'hvm'
}

我正在尝试使用以下方式访问“VolumeId”:

for x in ["BlockDeviceMappings"][0]["Ebs"]["VolumeId"]:
   print(x)

我得到TypeError: string indices must be integers

看起来“BlockDeviceMappings”是以一个包含字典的列表开始的,但我无法访问“VolumeId”。你知道吗

我也试过:

for x in ["BlockDeviceMappings"][0]:
   for k,v in ["Ebs"]:
      print(v)

我得到:

ValueError: too many values to unpack (expected 2)

我试着:

 for x in ["BlockDeviceMappings"][0]:
    for v in ["Ebs"]:
       print(v)

多次打印“Ebs”。你知道吗

有人能给我指一下正确的方向吗?你知道吗


Tags: indevtruefordatetimestatusprinttzinfo
1条回答
网友
1楼 · 发布于 2024-06-06 07:23:08

要获取卷ID,请使用

print x["Instances"][0]["BlockDeviceMappings"][0]["Ebs"]["VolumeId"]

你刚刚错过了x或∗。 出现错误是因为[“BlockDeviceMappings”][0]计算为“B”。 所以你想从“B”得到“orb”

要获取所有卷:

for i in x["Instances"]:
    for b in i["BlockDeviceMappings"]
        print b["Ebs"]["VolumeId"]

如果你必须经常从复杂的结构中提取数据,可以尝试一些奇怪的搜索库,比如github.com/akesterson/dpath网站-python,它只需要使用关键字就可以提取数据

相关问题 更多 >