Python根据value输出嵌套字典dict中所有的key,value,包括上级

有一个树形结构:
var data = {
key1: ‘str1’,
key2: {
key3: ‘str3’,
key4: ‘str4’,
key5: {
key6: ‘str6’
}
},
//…
}
实现一个方法getKeys(data, str); 获取字符串str在data中的所有上级节点名称,
例如:
getKeys(data, ‘str1’) 返回 ‘key1’
getKeys(data, ‘str3’) 返回 ‘key2 key3’
getKeys(data, ‘str6’) 返回 ‘key2 key5 key6’

实现如下:

import json

var_data = {
    'key1': 'str1',
    'key2': {
        'key3': 'str3',
        'key4': 'str4',
        'key5': {
            'key6': 'str6'
        }
    }
}

# keys = var_data.keys()
# dic = var_data.items()
# print(type(dic))
# print(type(json.dumps(var_data)))
# str = json.dumps(var_data)
# jsonstr = json.loads(str)
# print(type(jsonstr))
# key = var_data.get('key2')
# print(type(key))
# 
# for k, v in var_data.items():
#     if v == 'str1':
#         print(k)
res = []
def find_key(str, data):
    if isinstance(data, dict):
        for k, v in data.items():
            if v == str:
                res.append(k)
                print(res)
                break
            else:
                if isinstance(v, dict):
                    res.append(k)
                    find_key(str, v)


str1 = ''
find_key('str6', var_data)
for key in res:
    str1 = str1 + key
print(str1)

纠正结果:

var_data = {
    'key1': 'str1',
    'key2': {
        'key3': 'str3',
        'key4': 'str4',
        'key5': {
            'key6': 'str6'
        },
        'key7': 'str7',
    },
    'key8': 'str8',
}


res = {}


def find_key(strkey, data):
    if isinstance(data, dict):
        for key, value in data.items():
            find_key(strkey + key, value)
    else:
        res[strkey] = data


def get_key(str, data):
    find_key('', var_data)
    print(res)
    for k, v in res.items():
        if v == str:
            print(k)


get_key('str6', var_data)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值