有一个嵌套格式的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)
大概是这样吧:
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'}}