Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从嵌套字典中查找值_Python_Dictionary - Fatal编程技术网

Python 从嵌套字典中查找值

Python 从嵌套字典中查找值,python,dictionary,Python,Dictionary,我有一本字典,我需要找到一个键的值。以下命令不返回预期值“mar5 deliveryreport new” mydict['ClusterIdentifier'] 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 KeyError:“ClusterIdentifier” >>>麦迪克特 {u'DescribeClusterResponse':{u'Marker':无,u'Clusters':[{u'PubliclyAccessible':True,u'MasterUsername':u'ro

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

mydict['ClusterIdentifier'] 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 KeyError:“ClusterIdentifier” >>>麦迪克特 {u'DescribeClusterResponse':{u'Marker':无,u'Clusters':[{u'PubliclyAccessible':True,u'MasterUsername':u'root',u'VPCSecurityGroup':[],u'ModifyStatus':无,u'NumberOfNodes':1,u'PendingModifiedValue':{u'NodeType':无,u'ClusterType':无,u'MasterUserPassword':无,u'AutomatedSnapshotRetentionPeriod':无,u'ClusterVersion':无},u'NumberOfNodes':无,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'EstimatedTimeCompletionInSeconds':0,u'ElapsedTimeInSeconds':14035,u'SnapshotSizeInMegaBytes':804307},u'AllowVersionUpgrade':True,u'ClusterCreateTime':13812358.833,u'ClusterSubnetGroupName':无,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'}} >>>类型(mydict)
您无法访问它,因为您尝试访问它的方式完全错误

>>> 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'

嗯……你看到的有些出乎意料。你正在查询的词典中没有这样的关键字

问题是,如果您知道在字典中搜索的键,您可以检查它是否存在并快速检索。但是,在您的情况下,您不能简单地查找固定键,因为您不知道它放在哪个子字典中

在一般情况下,您需要遍历整个
dict
,这可能会非常慢。在问题的当前状态下,您应该注意以下几点:。仍然可能会出现一些问题,例如当基础结构中出现多个键时该怎么办,或者是否遍历列表等


或者,您需要提供期望键存在的字典的完整“路径”,例如,mydict[u'ClusterIdentifier'][u'DescribeClustersResult'][u'Clusters'][0][u'ClusterIdentifier']

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

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

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

你必须调整你的期望值,因为该字典根本不包含该键。我猜你正在处理一些JSON-RPC结果或类似结果,mydict中唯一的键是
u'DescribeClusterResponse'

像这样的层次结构常常是有原因的。例如,在这种情况下,
mydict[u'descripbeclustersresponse'][u'descripbeclustersresult'][u'Clusters']
是一个列表,表明可能描述了多个集群。因此,即使您有一个例程来深入搜索ClusterIdentifier,您仍然需要遍历任意数量的集群,并且可能仍然需要关联的数据

此外,该词典的默认打印样式也不可读。
pprint
是您的朋友:

import pprint
pprint.pprint(mydict)

您的密钥用法错误。这适用于您在此处给出的示例。mydict[''DescribeClusterResponse]['DescribeClusterResult']['Clusters'][0]['ClusterIdentifier']
import pprint
pprint.pprint(mydict)