无法打印嵌套字典键列表?

时间:2016-04-24 09:24:48

标签: python json dictionary

我有一个看起来像这样的字典:

{'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())

但是我一直得到属性错误:' str'对象没有属性'键'。

上面的

键包含Tesco密钥和另一个密钥。

上面的

key2包含与Tesco密钥关联的dicts(键/值对)列表。

key2.keys()应该提供与该词典相关联的键列表,但它似乎没有起作用!

我不希望函数为我这样做。

显然这是一个非常简单的解决方案,但我无法弄明白。 我已经花了5个小时就可以了,我现在正式放弃,因为它看起来应该非常简单:(

2 个答案:

答案 0 :(得分: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)

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

答案 1 :(得分:1)

使用.values():

可能更优雅
for sub_list in dict.values():
    for sub_dict in sub_list:
        print(sub_dict.keys())