从嵌套字典中查找值

2024-10-01 00:31:34 发布

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

我有一本字典,我需要找到一个键的值。以下命令未返回预期值“mar5 deliveryreport new”

>>> mydict['ClusterIdentifier']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'ClusterIdentifier'

>>> mydict
{u'DescribeClustersResponse': {u'DescribeClustersResult': {u'Marker': None, u'Clusters': [{u'PubliclyAccessible': True, u'MasterUsername': u'root', u'VpcSecurityGroups': [], u'ModifyStatus': None, u'NumberOfNodes': 1, u'PendingModifiedValues': {u'NodeType': None, u'ClusterType': None, u'MasterUserPassword': None, u'AutomatedSnapshotRetentionPeriod': None, u'ClusterVersion': None, u'NumberOfNodes': None}, u'VpcId': None, u'ClusterVersion': u'1.0', u'AutomatedSnapshotRetentionPeriod': 1, u'ClusterParameterGroups': [{u'ParameterApplyStatus': u'in-sync', u'ParameterGroupName': u'default.redshift-1.0'}], u'DBName': u'mydb', u'PreferredMaintenanceWindow': u'tue:08:00-tue:08:30', u'Endpoint': {u'Port': 5439, u'Address': u'mar5-deliveryreport-new.lc.us-east-1.redshift.amazonaws.com'}, u'RestoreStatus': {u'Status': u'completed', u'ProgressInMegaBytes': 804307, u'CurrentRestoreRateInMegaBytesPerSecond': 57.3072319201995, u'EstimatedTimeToCompletionInSeconds': 0, u'ElapsedTimeInSeconds': 14035, u'SnapshotSizeInMegaBytes': 804307}, u'AllowVersionUpgrade': True, u'ClusterCreateTime': 1381812358.833, u'ClusterSubnetGroupName': None, u'ClusterSecurityGroups': [{u'Status': u'active', u'ClusterSecurityGroupName': u'default'}], u'ClusterIdentifier': u'mar5-deliveryreport-new', u'AvailabilityZone': u'us-east-1a', u'NodeType': u'dw.hs1.xlarge', u'Encrypted': False, u'ClusterStatus': u'available'}]}, u'ResponseMetadata': {u'RequestId': u'233f495b-3576-11e3-83ff-d332123c25c4'}}}

>>> type(mydict)
<type 'dict'>

Tags: innonetruedefaultredshiftnewmydicttue
3条回答

对于'Address'键的值,您需要这样写

myDict['DescribeClustersResponse']['DescribeClustersResult']['Clusters'][0]['Endpoint']['Address']

它会给你你想要的。希望这对你有帮助。在

你无法访问它,因为你试图访问它的方式是完全错误的。在

>>> import pprint
>>> pprint.pprint(mydict)
{'DescribeClustersResponse': {'DescribeClustersResult': {'Clusters': [{'AllowVersionUpgrade': True,
                                                                       'AutomatedSnapshotRetentionPeriod': 1,
                                                                       'AvailabilityZone': 'us-east-1a',
                                                                       'ClusterCreateTime': 1381812358.833,
                                                                       'ClusterIdentifier': 'mar5-deliveryreport-new',
                                                                       'ClusterParameterGroups': [{'ParameterApplyStatus': 'in-sync',
                                                                                                   'ParameterGroupName': 'default.redshift-1.0'}],
                                                                       'ClusterSecurityGroups': [{'ClusterSecurityGroupName': 'default',
                                                                                                  'Status': 'active'}],
                                                                       'ClusterStatus': 'available',
                                                                       'ClusterSubnetGroupName': None,
                                                                       'ClusterVersion': '1.0',
                                                                       'DBName': 'mydb',
                                                                       'Encrypted': False,
                                                                       'Endpoint': {'Address': 'mar5-deliveryreport-new.lc.us-east-1.redshift.amazonaws.com',
                                                                                    'Port': 5439},
                                                                       'MasterUsername': 'root',
                                                                       'ModifyStatus': None,
                                                                       'NodeType': 'dw.hs1.xlarge',
                                                                       'NumberOfNodes': 1,
                                                                       'PendingModifiedValues': {'AutomatedSnapshotRetentionPeriod': None,
                                                                                                 'ClusterType': None,
                                                                                                 'ClusterVersion': None,
                                                                                                 'MasterUserPassword': None,
                                                                                                 'NodeType': None,
                                                                                                 'NumberOfNodes': None},
                                                                       'PreferredMaintenanceWindow': 'tue:08:00-tue:08:30',
                                                                       'PubliclyAccessible': True,
                                                                       'RestoreStatus': {'CurrentRestoreRateInMegaBytesPerSecond': 57.3072319201995,
                                                                                         'ElapsedTimeInSeconds': 14035,
                                                                                         'EstimatedTimeToCompletionInSeconds': 0,
                                                                                         'ProgressInMegaBytes': 804307,
                                                                                         'SnapshotSizeInMegaBytes': 804307,
                                                                                         'Status': 'completed'},
                                                                       'VpcId': None,
                                                                       'VpcSecurityGroups': []}],
                                                         'Marker': None},
                              'ResponseMetadata': {'RequestId': '233f495b-3576-11e3-83ff-d332123c25c4'}}}
>>> mydict['DescribeClustersResponse']['DescribeClustersResult']['Clusters'][0]['ClusterIdentifier']
'mar5-deliveryreport-new'

你必须调整你的期望值,因为字典里根本没有这个键。我猜您正在处理一些JSON-RPC结果或类似的结果,mydict中唯一的键是u'DescribeClustersResponse'。在

很多时候,像这样的层级结构是有原因的。例如,在本例中,mydict[u'DescribeClustersResponse'][u'DescribeClustersResult'][u'Clusters']是一个列表,表明可能有多个集群被描述。因此,即使您有一个深入搜索ClusterIdentifier的例程,您仍然必须遍历任意数量的ClusterIdentifier,并且可能无论如何都需要关联的数据。在

而且,那本词典的默认打印样式也很难阅读。pprint是你的朋友:

import pprint
pprint.pprint(mydict)

相关问题 更多 >