![](/img/trans.png)
[英]How to print all the keys and values together from a nested dictionary in Python?
[英]How to parse complex nested dictionary and print all keys sorted within nested dictionary in python?
我有以下數據
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)
使用此代碼,我的 output 是- ['earth', 'earth_forecast', 'first_entry', 'first_messanger', 'galaxy', 'globe', 'secondary_messanger']
缺少 output - 'avg_temp', 'zip_code', 'city_name', 'forecast', 'day', 'temp'
問題:如何改進代碼以使 output 也包含缺失的關鍵元素?
您需要遞歸調用 function,因為它們不止一層:
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 get_all_keys(d):
if isinstance(d, dict):
yield from d.keys()
yield from get_all_keys(list(d.values()))
elif isinstance(d, list):
for v in d:
yield from get_all_keys(v)
和
ret = get_all_keys(a)
list(set(ret))
給
['first_messanger', 'secondary_messanger', 'galaxy', 'earth_forecast', 'globe', 'forecast', 'day', 'zip_code', 'avg_temp', 'city_name', 'temp', 'earth', 'first_entry']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.