python嵌套字典代码_python – 用另一个字典的值替换嵌套字典的键(两个字典的键相等)),键的值可以是dicts列表...

我有两个dict,dict1和dict2,我想用键值对构造新的dict(或操作dict1)(dict2的值:dict1的值[其中dict的键和dict2的键相同]),value键的列表可能是dicts列表(正如您将在输入示例中看到的那样)

输入是

dict1 = {"key1":{"key3":"value1","key2":"value2","key4":{"key5":"value3","key6":{"key7":"value4","key8":{"key9":"value5","key10":"value6","key55":"value7"}},"key11":{"key12":"value8","key13":"value9"},"key14":[{"key15":"value10","key16":"value11","key17":"value12"},{"key15":"value13","key16":"value14","key17":"value15"}]}}}

dict2 = {"key1":"ab","key2":"bc","key3":"cd","key4":"de","key5":"ef","key6":"fg","key7":"gh","key8":"hi","key9":"ij","key10":"jk","key55":"kl","key11":"lm","key12":"mn","key13":"no","key14":"op","key15":"pq","key16":"qr","key17":"qs"}

我的功能是

def walk(dict1, dict2):

output = {}

for key, value in dict1.iteritems():

if isinstance(value, dict):

output[dict2[key]] = walk(value, dict2)

elif isinstance(value, list):

output[dict2[key]] = walk_list(value, dict2)

else:

output[dict2[key]] = value

return output

def walk_list(sublist, dict2):

output = []

for i in sublist:

if isinstance(i, dict):

output = walk(i, dict2)

elif isinstance(value, list):

output = walk_list(i, dict2)

else:

output.append((key, value))

return output

output = walk(dict1, dict2)

output = json.dumps(output)

print output

输出就是

{"ab": {"de": {"lm": {"mn": "value8", "no": "value9"}, "ef": "value3", "fg": {"hi": {"ij": "value5", "jk": "value6", "kl": "value7"}, "gh": "value4"}, "op": {"pq": "value13", "qs": "value15", "qr": "value14"}}, "bc": "value2", "cd": "value1"}}

预期产出是

{"ab":{"cd":"value1","bc":"value2","de":{"ef":"value3","fg":{"gh":"value4","hi":{"ij":"value5","jk":"value6","kl":"value7"}},"lm":{"mn":"value8","no":"value9"},"op":[{"pq":"value10","qr":"value11","qs":"value12"},{"pq":"value13","qr":"value14","qs":"value15"}]}}}

请修复我的代码.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值