2016-04-24 71 views
-2

我有一个字典,看起来像这样:无法打印嵌套字典键列表?

{'Tesco': [{'Parking': 'True', 'TrolleyHire': True, 
    'Location': {'Address': {'BuildingName': 'Church Street', 
      'BuildingNumber': '14', 'City' : 'London'}, 
    'Permit' = True}, 

基本上它是一个字典,其中键包含在列表的形式嵌套字典。

我想打印出上面第一个“Tesco”键内的所有嵌套键。

我曾尝试:

for key in dict: 
for key2 in dict[key]: 
    print (key2.keys()) 

不过,我不断收到AttributeError的: '海峡' 对象有没有属性 '钥匙'。

上面的密钥包含Tesco密钥和另一个密钥。

上面的key2包含与Tesco密钥关联的字典列表(键/值对)。

key2.keys()应该提供与该字典关联的密钥列表,但它似乎并不工作!

我不想要一个函数来为我做这件事。

显然这是一个非常简单的解决方案,但我无法弄清楚。 我从字面上花了它5小时,我现在正式放弃,因为它似乎像它应该是非常简单的事:(

+5

你发布的内容不是有效的python字典。请举一个实际运行的例子。 – timgeb

回答

2

它为我的作品:

dict = { 
'Tesco': [{'Parking': 'True', 'TrolleyHire': True, 
'Location': {'Address': {'BuildingName': 'Church Street', 
'BuildingNumber': '14', 'City' : 'London'}, 
'Permit': True}}] 
} 

for key in dict: 
    for key2 in dict[key]: 
     print (key2.keys()) 

此打印:

dict_keys(['Location', 'Parking', 'TrolleyHire']) 

是那绝对是你使用它的词典?我不得不在最后添加一些东西来完成它。

编辑:看到你的原代码后。

正如你所说,JSON使用两个键 - Scheme和ChargeDevice创建一个字典。您遍历每个这些键。

第一次通过时,key等于"Scheme"

然后您会说for key2 in data[key],它会将与“Scheme”关联的字典并遍历其关键字。

问题是,key2将始终表示一个关键字符串 - 并且字符串没有键,只有dicts可以。例如,key2将取值“SchemeCode”,它是一个字符串,并且您正在调用key2.keys() - 并且字符串没有keys()方法,因此是错误。你可能只想要print(key2)

编辑2

我不知道我完全理解你所需要的,但下面将打印键列表,没有重复,在主字典的第二个层次。

key_names = [] 
for key in data: 
    for key2 in data[key]: 
     if type(key2) == str and key2 not in key_names: 
      key_names.append(key2) 
     elif type(key2) == dict: 
      for key3 in key2.keys(): 
       if key3 not in key_names: 
        key_names.append(key3) 
print(key_names) 

如果你想要任意深入,你将需要使用一个函数,递归调用我自己。

+0

嗯我一直得到: AttributeError:'str'对象没有属性'keys' on print(key2.keys()) – teep

+0

奇怪的是我很确定这个工作和昨天打算的完全一样。相同的字典,没有任何改变。 – teep

+1

您在问题中放入的字典不能是您正在使用的字典,因为它最后缺少花括号,并且语法错误。如果从代码中粘贴实际字典,它可能会变得更清晰。 –

1

它可能是更优雅,只需使用.values():

for sub_list in dict.values(): 
    for sub_dict in sub_list: 
     print(sub_dict.keys()) 
+0

仍然得到: AttributeError:'str'对象在最后一行没有属性'keys' – teep

+1

您能否使用实际的字典更新您的问题?这对我来说工作正常 – tobspr

+0

请参阅我对Sam的评论,了解我做了什么。使用tobspr代码时会出现同样的错误。 – Marichyasana