如何在python中解析复杂的嵌套字典并打印嵌套字典中排序的所有键?
我有以下数据如何在python中解析复杂的嵌套字典并打印嵌套字典中排序的所有键?,python,Python,我有以下数据 a = {'globe': {'first_entry': 0, 'first_messanger': 100, 'galaxy': 7}, 'earth': {'secondary_messanger': 9, 'earth_forecast': {'avg_temp': 60, 'z
a = {'globe': {'first_entry': 0,
'first_messanger': 100,
'galaxy': 7},
'earth': {'secondary_messanger': 9,
'earth_forecast': {'avg_temp': 60,
'zip_code': 10001,
'city_name': 'New York',
'forecast': [{'day': 'Monday',
'temp': '70'},
{'day': 'Tuesday',
'temp': '71'},
{'day': 'Wednesday',
'temp': '60'}]}}}
我试过使用代码
def parsingvalue(b):
lst = []
for key, value in b.items():
if isinstance(value, dict):
tmp = value.keys()
for i in tmp:
lst.append(i)
lst.append (key)
print (sorted(lst))
parsingvalue (a)
使用此代码,我的输出是-['earth','earth\u forecast','first\u entry','first\u messanger','galaxy','globe','secondary\u messanger']
输出丢失-'avg\u temp','zip\u code','city\u name','forecast','day','temp'
问题:如何改进代码,使输出也包含缺少的关键元素?您需要递归调用函数,因为它们是多个层:
def get_all_keys(d, res=None):
if res is None:
res = []
for k in d:
res.append(k)
if isinstance(d[k], dict):
get_all_keys(d[k], res)
if isinstance(d[k], list):
for i in d[k]:
if isinstance(i, dict):
get_all_keys(i, res)
return res
ret = get_all_keys(a)
list(set(ret))
给出:
['forecast',
'secondary_messanger',
'first_entry',
'zip_code',
'day',
'galaxy',
'first_messanger',
'temp',
'earth',
'globe',
'city_name',
'avg_temp',
'earth_forecast']
几乎与@z-li获得递归技巧的解决方案相同,但只对dict实例进行了一次测试,使用生成器而不是传递列表,并且更健壮,因为它不假设输入是dict:
def获取所有密钥(d):
如果存在(d,dict):
d.keys()的收益率
从get_all_键(列表(d.values())获得的收益
elif isinstance(d,列表):
对于d中的v:
获取所有密钥的收益(v)
与
ret=获取所有密钥(a)
列表(集合(ret))
给予
@李智-非常感谢。这很好用。
['first_messanger', 'secondary_messanger', 'galaxy', 'earth_forecast', 'globe', 'forecast', 'day', 'zip_code', 'avg_temp', 'city_name', 'temp', 'earth', 'first_entry']