我有以下由串列組成的字典
response = client.describe_auto_scaling_groups()
print(type(response),'\n')
for key,value in response.items():
print(type(value))
print(len(value))
結果是
<class 'dict'>
<class 'list'>
2
<class 'dict'>
4
我只對串列輸出感興趣,當我進一步深入研究串列中的資料型別時,我得到
for key,value in response.items():
print(type(value))
print(len(value))
for lst in value:
print(type(lst))
我明白了
<class 'dict'>
<class 'list'>
2
<class 'dict'>
<class 'dict'>
<class 'dict'>
4
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
所以基本上我有一個 1 dict 物件,其中有一個 2 串列物件(對應于 2 個自動縮放組),其中有 4 個 str 物件。
response物件看起來像這樣
{'AutoScalingGroups': [{'AutoScalingGroupName': 'eks-core-20221011202902697400000006-6ac1e45e-44ee-4a43-166c-12d3d432e241', 'AutoScalingGroupARN': 'arn:aws:autoscaling:ca-central-1:744734775600:autoScalingGroup:e700fbf0-178e-4ff8-8687-6b7103af5b65:autoScalingGroupName/eks-core-20221011202902697400000006-6ac1e45e-44ee-4a43-166c-12d3d432e241', 'MixedInstancesPolicy': {'LaunchTemplate': {'LaunchTemplateSpecification': {'LaunchTemplateId': 'lt-0477d3fffb684214d', 'LaunchTemplateName': 'eks-6ac1e45e-44ee-4a43-166c-12d3d432e241', 'Version': '1'}, 'Overrides': [{'InstanceType': 't3.2xlarge'}]}, 'InstancesDistribution': {'OnDemandAllocationStrategy': 'prioritized', 'OnDemandBaseCapacity': 0, 'OnDemandPercentageAboveBaseCapacity': 0, 'SpotAllocationStrategy': 'capacity-optimized'}}, 'MinSize': 3, 'MaxSize': 6, 'DesiredCapacity': 3, 'DefaultCooldown': 300, 'AvailabilityZones': ['ca-central-1d', 'ca-central-1b', 'ca-central-1a'], 'LoadBalancerNames': [], 'TargetGroupARNs': ['arn:aws:elasticloadbalancing:ca-central-1:744734775600:targetgroup/eks-ingress-http/3dfa91118f700452', 'arn:aws:elasticloadbalancing:ca-central-1:744734775600:targetgroup/eks-ingress/e4a924db58da487a'], 'HealthCheckType': 'EC2', 'HealthCheckGracePeriod': 15, 'Instances': [{'InstanceId': 'i-020d70d503bc32dbc', 'InstanceType': 't3.2xlarge', 'AvailabilityZone': 'ca-central-1b', 'LifecycleState': 'InService', 'HealthStatus': 'Healthy', 'LaunchTemplate': {'LaunchTemplateId': 'lt-0477d3fffb684214d', 'LaunchTemplateName': 'eks-6ac1e45e-44ee-4a43-166c-12d3d432e241', 'Version': '1'}, 'ProtectedFromScaleIn': False}, {'InstanceId': 'i-05da68bac7b47b5f6', 'InstanceType': 't3.2xlarge', 'AvailabilityZone': 'ca-central-1a', 'LifecycleState': 'InService', 'HealthStatus': 'Healthy', 'LaunchTemplate': {'LaunchTemplateId': 'lt-0477d3fffb684214d', 'LaunchTemplateName': 'eks-6ac1e45e-44ee-4a43-166c-12d3d432e241', 'Version': '1'}, 'ProtectedFromScaleIn': False}, {'InstanceId': 'i-099e1d57a3cb55d93', 'InstanceType': 't3.2xlarge', 'AvailabilityZone': 'ca-central-1d', 'LifecycleState': 'InService', 'HealthStatus': 'Healthy', 'LaunchTemplate': {'LaunchTemplateId': 'lt-0477d3fffb684214d', 'LaunchTemplateName': 'eks-6ac1e45e-44ee-4a43-166c-12d3d432e241', 'Version': '1'}, 'ProtectedFromScaleIn': False}], 'CreatedTime': datetime.datetime(2022, 10, 11, 20, 29, 50, 226000, tzinfo=tzutc()), 'SuspendedProcesses': [], 'VPCZoneIdentifier': 'subnet-0286d381da9f5fa9c,subnet-0fc58322f447bae71,subnet-0381004140a514844', 'EnabledMetrics': [{'Metric': 'GroupInServiceCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupTotalInstances', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolDesiredCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupDesiredCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupAndWarmPoolDesiredCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupAndWarmPoolTotalCapacity', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolTerminatingCapacity', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolMinSize', 'Granularity': '1Minute'}, {'Metric': 'GroupMinSize', 'Granularity': '1Minute'}, {'Metric': 'GroupInServiceInstances', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolPendingCapacity', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolWarmedCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupStandbyCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupTerminatingInstances', 'Granularity': '1Minute'}, {'Metric': 'GroupMaxSize', 'Granularity': '1Minute'}, {'Metric': 'GroupPendingInstances', 'Granularity': '1Minute'}, {'Metric': 'GroupStandbyInstances', 'Granularity': '1Minute'}, {'Metric': 'GroupTerminatingCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupPendingCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupTotalCapacity', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolTotalCapacity', 'Granularity': '1Minute'}], 'Tags': [{'ResourceId': 'eks-core-20221011202902697400000006-6ac1e45e-44ee-4a43-166c-12d3d432e241', 'ResourceType': 'auto-scaling-group', 'Key': 'eks:cluster-name', 'Value': 'dev-build', 'PropagateAtLaunch': True}, {'ResourceId': 'eks-core-20221011202902697400000006-6ac1e45e-44ee-4a43-166c-12d3d432e241', 'ResourceType': 'auto-scaling-group', 'Key': 'eks:nodegroup-name', 'Value': 'core-20221011202902697400000006', 'PropagateAtLaunch': True}, {'ResourceId': 'eks-core-20221011202902697400000006-6ac1e45e-44ee-4a43-166c-12d3d432e241', 'ResourceType': 'auto-scaling-group', 'Key': 'k8s.io/cluster-autoscaler/dev-build', 'Value': 'owned', 'PropagateAtLaunch': True}, {'ResourceId': 'eks-core-20221011202902697400000006-6ac1e45e-44ee-4a43-166c-12d3d432e241', 'ResourceType': 'auto-scaling-group', 'Key': 'k8s.io/cluster-autoscaler/enabled', 'Value': 'true', 'PropagateAtLaunch': True}, {'ResourceId': 'eks-core-20221011202902697400000006-6ac1e45e-44ee-4a43-166c-12d3d432e241', 'ResourceType': 'auto-scaling-group', 'Key': 'kubernetes.io/cluster/dev-build', 'Value': 'owned', 'PropagateAtLaunch': True}], 'TerminationPolicies': ['AllocationStrategy', 'OldestLaunchTemplate', 'OldestInstance'], 'NewInstancesProtectedFromScaleIn': False, 'ServiceLinkedRoleARN': 'arn:aws:iam::744734775600:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling', 'CapacityRebalance': True}, {'AutoScalingGroupName': 'eks-dip-jobs-2022101120290341260000000d-9ec1e45e-4631-847b-b82d-d42d0fc330f0', 'AutoScalingGroupARN': 'arn:aws:autoscaling:ca-central-1:744734775600:autoScalingGroup:e18ade5c-2740-4648-85b5-d7d6b3253629:autoScalingGroupName/eks-dip-jobs-2022101120290341260000000d-9ec1e45e-4631-847b-b82d-d42d0fc330f0', 'MixedInstancesPolicy': {'LaunchTemplate': {'LaunchTemplateSpecification': {'LaunchTemplateId': 'lt-0fda9790b0b400c88', 'LaunchTemplateName': 'eks-9ec1e45e-4631-847b-b82d-d42d0fc330f0', 'Version': '1'}, 'Overrides': [{'InstanceType': 't3.xlarge'}]}, 'InstancesDistribution': {'OnDemandAllocationStrategy': 'prioritized', 'OnDemandBaseCapacity': 0, 'OnDemandPercentageAboveBaseCapacity': 0, 'SpotAllocationStrategy': 'capacity-optimized'}}, 'MinSize': 0, 'MaxSize': 10, 'DesiredCapacity': 0, 'DefaultCooldown': 300, 'AvailabilityZones': ['ca-central-1d', 'ca-central-1b', 'ca-central-1a'], 'LoadBalancerNames': [], 'TargetGroupARNs': [], 'HealthCheckType': 'EC2', 'HealthCheckGracePeriod': 15, 'Instances': [], 'CreatedTime': datetime.datetime(2022, 10, 11, 20, 29, 41, 507000, tzinfo=tzutc()), 'SuspendedProcesses': [], 'VPCZoneIdentifier': 'subnet-0286d381da9f5fa9c,subnet-0fc58322f447bae71,subnet-0381004140a514844', 'EnabledMetrics': [{'Metric': 'GroupStandbyCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupPendingInstances', 'Granularity': '1Minute'}, {'Metric': 'GroupPendingCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupTerminatingCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupTotalCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupTerminatingInstances', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolMinSize', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolTerminatingCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupInServiceInstances', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolWarmedCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupMaxSize', 'Granularity': '1Minute'}, {'Metric': 'GroupTotalInstances', 'Granularity': '1Minute'}, {'Metric': 'GroupInServiceCapacity', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolDesiredCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupAndWarmPoolDesiredCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupAndWarmPoolTotalCapacity', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolPendingCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupDesiredCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupMinSize', 'Granularity': '1Minute'}, {'Metric': 'WarmPoolTotalCapacity', 'Granularity': '1Minute'}, {'Metric': 'GroupStandbyInstances', 'Granularity': '1Minute'}], 'Tags': [{'ResourceId': 'eks-dip-jobs-2022101120290341260000000d-9ec1e45e-4631-847b-b82d-d42d0fc330f0', 'ResourceType': 'auto-scaling-group', 'Key': 'eks:cluster-name', 'Value': 'dev-build', 'PropagateAtLaunch': True}, {'ResourceId': 'eks-dip-jobs-2022101120290341260000000d-9ec1e45e-4631-847b-b82d-d42d0fc330f0', 'ResourceType': 'auto-scaling-group', 'Key': 'eks:nodegroup-name', 'Value': 'dip-jobs-2022101120290341260000000d', 'PropagateAtLaunch': True}, {'ResourceId': 'eks-dip-jobs-2022101120290341260000000d-9ec1e45e-4631-847b-b82d-d42d0fc330f0', 'ResourceType': 'auto-scaling-group', 'Key': 'k8s.io/cluster-autoscaler/dev-build', 'Value': 'owned', 'PropagateAtLaunch': True}, {'ResourceId': 'eks-dip-jobs-2022101120290341260000000d-9ec1e45e-4631-847b-b82d-d42d0fc330f0', 'ResourceType': 'auto-scaling-group', 'Key': 'k8s.io/cluster-autoscaler/enabled', 'Value': 'true', 'PropagateAtLaunch': True}, {'ResourceId': 'eks-dip-jobs-2022101120290341260000000d-9ec1e45e-4631-847b-b82d-d42d0fc330f0', 'ResourceType': 'auto-scaling-group', 'Key': 'kubernetes.io/cluster/dev-build', 'Value': 'owned', 'PropagateAtLaunch': True}], 'TerminationPolicies': ['AllocationStrategy', 'OldestLaunchTemplate', 'OldestInstance'], 'NewInstancesProtectedFromScaleIn': False, 'ServiceLinkedRoleARN': 'arn:aws:iam::744734775600:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling', 'CapacityRebalance': True}], 'ResponseMetadata': {'RequestId': 'e4d9be35-53d6-4efe-b66e-bc6ad1f91a19', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'e4d9be35-53d6-4efe-b66e-bc6ad1f91a19', 'content-type': 'text/xml', 'content-length': '17188', 'vary': 'accept-encoding', 'date': 'Wed, 19 Oct 2022 20:17:05 GMT'}, 'RetryAttempts': 0}}
我的最終目標是為主 dict 物件內的 1 個串列中的 2 個串列物件中的每一個提取AutoScalingGroupName和。DesiredCapacity
我到目前為止的代碼是
for key,value in response.items():
for k in value:
for keyy,valuee in k.items():
if keyy == 'AutoScalingGroupName':
print(valuee)
elif keyy == 'DesiredCapacity':
print(valuee)
這給了我
eks-core-20221011202902697400000006-6ac1e45e-44ee-4a43-166c-12d3d432e241
3
eks-dip-jobs-2022101120290341260000000d-9ec1e45e-4631-847b-b82d-d42d0fc330f0
0
Traceback (most recent call last):
File "/Users/me/Work/gitlab/img-asg-exporter/aws.py", line 62, in <module>
get_asg_names()
File "/Users/me/Work/gitlab/img-asg-exporter/aws.py", line 55, in get_asg_names
for keyy,valuee in k.items():
AttributeError: 'str' object has no attribute 'items'
我了解錯誤發生的原因,并且我知道如何解決該問題。我的問題是這是否是提取此類值的最佳方式?我最終想將這些值附加到一個新的字典中并讓它像
final = {
"eks-core-20221011202902697400000006-6ac1e45e-44ee-4a43-166c-12d3d432e241": "3",
"eks-dip-jobs-2022101120290341260000000d-9ec1e45e-4631-847b-b82d-d42d0fc330f0": "0"
}
uj5u.com熱心網友回復:
要解決看似相對簡單的問題,您的問題有很多復雜性。
您似乎在問:我如何從我的主字典串列中的字典中獲取'AutoScalingGroupName'和'DesiredCapacity'值,并將它們存盤在結構為的新字典中?'AutoScalingGroups'responsename: capacity
所以,那只是:
result = {
asg['AutoScalingGroupName']: asg['DesiredCapacity']
for asg in response['AutoScalingGroups']
}
字典其他部分的型別和值response并不重要,實際的組數也是如此。只要每個自動伸縮組有一個組名和一個容量,上面就會給你你所需要的。
uj5u.com熱心網友回復:
您可以遍歷response['AutoScalingGroups'](list) 并使用 dict-comprehension 從字典中獲取值
result = {
item['AutoScalingGroupName']:item['DesiredCapacity']
for item in response['AutoScalingGroups']
}
結果:
{'eks-core-20221011202902697400000006-6ac1e45e-44ee-4a43-166c-12d3d432e241': 3,
'eks-dip-jobs-2022101120290341260000000d-9ec1e45e-4631-847b-b82d-d42d0fc330f0': 0}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/518600.html
標籤:Python
上一篇:在python中使用遞回求和矩陣
