问题描述
嵌套字典列表的递归遍历
解决方案
def list_dictionary(d, n_tab=-1):
if isinstance(d, list):
for i in d:
list_dictionary(i, n_tab)
elif isinstance(d, dict):
n_tab+=1
for key, value in d.items():
print("{}key:{}".format("\t"*n_tab, key))
list_dictionary(value, n_tab)
else:
print("{}{}".format("\t"*n_tab, d))
data = {"info": "成绩单",
"grades": {
"Chinese":
[{"小明": 60}, {"小红": 80}],
"Math":
[{"小明": 90}, {"小红": 70}],
"English":
[{"小明": 80}, {"小红": 80}],
}}
list_dictionary(data)
效果
key:info
成绩单
key:grades
key:Chinese
key:小明
60
key:小红
80
key:Math
key:小明
90
key:小红
70
key:English
key:小明
80
key:小红
80
参考文献 1 只能跑嵌套字典,稍微改进了一下
遍历嵌套列表字典并应用函数
def f(x):
return x + 1
def traverse_list_dict(data, f):
"""遍历嵌套列表字典并应用函数(原数据会被改变)
:param data: 嵌套列表字典
:param f: 要应用的函数
"""
if isinstance(data, list):
for i, x in enumerate(data):
data[i] = traverse_list_dict(x, f)
elif isinstance(data, dict):
for key, value in data.items():
data[key] = traverse_list_dict(value, f)
else:
data = f(data)
return data
data = [1, [2, 3], [4, [5, 6]]]
print(traverse_list_dict(data, f))
print(data)
data = {
'a': 1,
'b': {'b1': 2, 'b2': 3},
'c': {'c1': 4, 'c2': [5, 6, {'c21': 7}], 'c3': {'c31': [8, 9]}}
}
print(traverse_list_dict(data, f))
print(data)