我需要遍历一个复杂的字典并根据几个条件对其进行修改。
这是一个字典的基本示例:
a = {
'x' : ["x1", "x2", 'x3'],
'y' : [
{'y1' : 1},
{'y2' : 2.0},
{'y3' : True},
{'y4' : 99},
],
'z' : {
'x' : ["a1", "a2", 'a3'],
'y' : [
{'y1' : 66},
{'y2' : False},
{'y3' : 3},
{'y4' : 4.3},
]
},
'y3' : "Delete Me"
}
遍历它也没有问题,比如这样:
pTypes = [str, bool, int, float]
def parse(d, path=[]):
t = type(d)
if t == dict:
for k, v in d.items():
parse(v, path + [k])
elif t == list:
for i, item in enumerate(d):
parse(item, path + [i])
elif t in pTypes:
print(path, '=>', d)
else:
print('Error:', path, d, t)
parse(a, [])
我的难题在于,我需要删除所有键为'y3'的项或值大于50的项。此外,所有字符串都需要被'-'包围,如'x1'变为'-x1-'。
直接修改数据似乎并不起作用(没有持久性):
...
elif t in pTypes:
if t == str:
d = '-'+d+'-'
...
而且,我还不知道如何在遍历字典本身的同时移除项目。
由于字典可能非常大,我更倾向于不对原始字典做一个“简化”的副本来进行操作。
有人能帮助我吗?