Python嵌套格式的字典中value值的修改问题

有一个嵌套格式的Dict, 格式为{"A":"a", "B":["c", "d", "b"], "D": {"F":"c", "M":"a"}, ..},字典中的元素值可以为str, list或者dict ,元素个数等均可变。 用python语言写一个函数,输入为该Dict, 将其中的"a"全部替换成"b"(注意:"a"或者"b"只会出现在Dict的value上,不会在key上),输出替换后的该Dict。

使用isinstance对数据类型进行判断,取字典键值对值替换即可。代码如下:

d = {"A": "a", "B": ["c", "d", "b"], "D": {"F": "c", "M": "a"}}

def conv(x):
    for k,v in x.items():
        if isinstance(v,list):
            if 'a' in v:
                v[v.index("a")]='b'
        if isinstance(v,dict):
            conv(v)
        else:
            if v=="a":
                v="b"
        x.update({k:v})
    return x
print(conv(d))

如对你有帮助,请点击我回答右上方采纳按钮给予采纳~~

你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)

dic={"A":"a", "B":["c", "d", "b"], "D": {"F":"c", "M":"a"},  "E":[{"F":["c","a"], "M":"a"}, "a"]}
def pf(obj):
    if type(obj)==dict:
        for k,v in obj.items():
            if v=="a":
                obj[k] = "b"
            else:
                pf(v)
    elif type(obj)==list:
        for i,v in enumerate(obj):
            if v=="a":
                obj[i] = "b"
            else:
                pf(v)
pf(dic)

print(dic)

img

大概是这样吧:

def changeall(a,t):
    r=[]
    for i in a:
        if type(i)==str:
            if i=='a':
                r.append('b')
            else:
                r.append(i)
        elif type(i)==dict:
            r.append(change(i))
        elif type(i) in(list,tuple,map):
            r.append(changeall(i,type(i)))
    return t(r)
def change(dd):
    for k in dd.keys():
        i=dd[k]
        if type(i)==str and i=='a':
            dd[k]='b'
        elif type(i)==dict:
            dd[k]=change(i)
        elif type(i) in (list,tuple,map):
            dd[k]=changeall(i,type(i))
    return dd

d={"A":"a", "B":["c", "a", "b",('a','c')],"C":('v','c',{'B':'c','D':'a'}), "D": {"F":"c", "M":"a"}}

print(change(d))

目前只判断str, list, tuple, map, dict等类型,你可以根据需要添加。


data = {"A": "a", "B": ["c", "d", "b"], "D": {"F": "c", "M": "a"}}


def parse_replacement(params: dict):
    
    for key, value in params.items():
        if isinstance(value, str) and value == "a":
            data[key] = 'b'
        if isinstance(value, list):
            data[key] = ['b' if i == 'a' else i for i in value]
        if isinstance(value, dict):
            data[key] = parse_replacement(value)
    return data


print(parse_replacement(data))

输出结果:
{'A': 'b', 'B': ['c', 'd', 'b'], 'D': {'F': 'c', 'M': 'b'}}