我有一个看起来像这样的字典:
{'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个小时就可以了,我现在正式放弃,因为它看起来应该非常简单:(
答案 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())