Python深度遍历查找字典键对应的值,在多层嵌套的字典中找到你要的数据

21 篇文章 0 订阅
13 篇文章 1 订阅

!!这是一个直接可用的方法!!

看看效果!

  • 我们有这样一个多层嵌套的多维字典:
# 老千层饼
data = {
    '千层饼': {
        '你以为我是第一层': {
            '其实我是第五层': '呵呵',
            '其实还有': {
                '肉弹葱鸡': ['哦!'],
                '又千层了': '重名了但是一样找到',
                '字符串类型,但是我想转换成整数': '999'
            }
        },
        '对': '对又怎么了',
        '好得很': '嗯'
    },
    '呵呵': '怎么',
    '又千层了': {
        '是的': '确实',
        '加一层': {
            '再加一层': {
                '嗯': '找到了'
            }
        }
    }
}
  • 如果我们想要从中拿一个数据出来,是十分麻烦的……
# 赋值
肉弹葱鸡 = data['千层饼']['你以为我是第一层']['其实还有']['肉弹葱鸡']
  • 于是为了减少麻烦,我写了个可以直接使用的函数:
# 调用
肉弹葱鸡 = find('肉弹葱鸡', data)
print(肉弹葱鸡)

输出:['哦!']
  • 很好!但是这个data字典里存在两个名字一样的键**又千层了**,会不会有问题呢?
  • 不用担心!请看:
# 调用
多个结果 = findAll('又千层了',data)
print(多个结果)

输出:[{'是的': '确实', '加一层': {'再加一层': {'嗯': '找到了'}}}, '重名了但是一样找到']
  • 嗯,函数直接找到了所有符合该键名的值。下面直接放出这两个方法:
# 查找单个键
def find(target, dictData, notFound='没找到'):
    queue = [dictData]
    while len(queue) > 0:
        data = queue.pop()
        for key, value in data.items():
            if key == target: return value
            elif type(value) == dict: queue.append(value)
    return notFound

# 有多个同名键在字典里时,可以用这个方法
def findAll(target, dictData, notFound=[]):
    queue = [dictData]
    result = []
    while len(queue) > 0:
        data = queue.pop()
        for key, value in data.items():
            if key == target: result.append(value)
            elif type(value) == dict: queue.append(value)
    if not result: result = notFound
    return result

完毕。


PurePeace
2020年3月24日

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 在Python,可以使用深度遍历的方式查找字典对应。这种方式可以用来在多层嵌套字典找到所需要的数据深度遍历是一种搜索算法,它从根节点开始,遍历整个树结构,直到找到目标节点为止。在遍历过程,先访问子节点,再回溯到父节点,直到遍历完所有可能的路径。对于嵌套字典结构,也可以使用类似的方法进行逐级查找。 首先,需要定义一个递归函数来遍历字典。该函数的输入参数包括需要查找和当前字典。函数会首先判断当前字典是否包含需要查找,如果包含则返回对应;否则继续遍历当前字典的子字典,直到找到目标遍历完所有可能的路径为止。 以下是一个简单的Python代码示例: ``` def find_value(key, dct): if key in dct: return dct[key] for v in dct.values(): if isinstance(v, dict): result = find_value(key, v) if result is not None: return result return None ``` 该函数首先判断当前字典是否包含需要查找,如果包含则返回对应。如果不含,则遍历当前字典的子字典,并递归调用该函数来继续查找目标。如果遍历完所有可能的路径仍未找到目标,则返回None。 可以使用该函数来查找多层嵌套字典。例如,假设有一个字典如下: ``` data = {'name': 'Alice', 'age': 25, 'city': 'Beijing', 'contacts': {'phone': '123456789', 'email': 'alice@example.com', 'address': {'street': '123 Main St.', 'zipcode': '100010'}}} ``` 要查找字典"street"对应,可以调用find_value函数: ``` street = find_value('street', data) print(street) ``` 运行结果为: ``` 123 Main St. ``` 这表明在多层嵌套字典成功查找到了目标,证明深度遍历查找字典对应的有效方法。 ### 回答2: 深度遍历是一种遍历树或图结构的算法,它从根节点开始沿着一条路径遍历直到叶子节点,然后回溯到该节点的兄弟节点再继续遍历。在Python,我们可以使用递归函数实现深度遍历查找字典对应。 假设我们有一个多层嵌套字典,要查找某个对应,可以按照以下步骤进行: 1. 定义一个递归函数,该函数接受两个参数,分别为要查找和要查找字典。 2. 在函数内部,先检查当前字典是否存在要查找。如果存在,返回对应;否则,进入下一步。 3. 遍历当前字典的所有对,对于每个判断它是否为字典类型。如果是,就递归调用上一步骤,在子字典查找查找;否则,继续遍历下一个对。 4. 如果在所有子字典都没有找到查找,返回None。 下面是一个示例代码: ``` def find_value(key, dictionary): if key in dictionary: return dictionary[key] for value in dictionary.values(): if isinstance(value, dict): result = find_value(key, value) if result is not None: return result return None # 示例数据 data = { 'name': 'Tom', 'age': 20, 'address': { 'city': 'Beijing', 'zipcode': '100000', 'others': { 'phone': '123456789', 'email': 'tom@example.com' } } } # 查询 address 下的 email value = find_value('email', data['address']) print(value) # 输出 'tom@example.com' ``` 在上面的示例,我们定义了一个 `find_value` 函数,它接受要查找和要查找字典。函数先检查当前字典是否存在要查找,如果存在就返回对应;否则,遍历当前字典的所有对,对于每个,如果它是字典类型就递归调用 `find_value` 函数,在子字典查找查找。最后,如果在所有子字典都没有找到查找,返回None。 使用示例数据进行测试,我们调用 `find_value` 函数查找 `address` 下的 `email` 对应,并打印出来。运行程序,输出结果 `tom@example.com`,说明函数成功查找到了要查找。 ### 回答3: Python是一种开源的高级编程语言,拥有强大的数据分析和深度学习功能。其,在多层嵌套字典查找特定的数据Python编程经常用到的操作,这就需要运用深度遍历的方法进行字典查找。 在Python字典(Dictionary)是一种非常重要的数据类型,它是由对组成的无序集合,可以快速地查找到所需要的数据。但是在字典嵌套多层的子字典,这时就需要使用深度遍历的方法进行查找深度遍历是一种递归算法,它的原理是从根节点开始逐层深入,直到找到目标数据或者遍历完所有节点。具体的操作流程如下: (1)判断当前节点是否为目标对,如果是,直接返回该节点的;否则,执行下一步操作。 (2)遍历当前节点的所有子节点,如果当前节点有子节点,则递归到下一个子节点,执行步骤(1);如果当前节点没有子节点,则返回None。 (3)遍历所有子节点的返回,如果返回不为空,则直接返回该。 下面就以一个嵌套字典为例,来进行实际操作。 # 定义一个嵌套字典 data = { "key1": "value1", "key2": { "key21": "value21", "key22": { "key221": "value221", "key222": "value222" } }, "key3": "value3" } # 定义一个深度遍历函数 def deep_search(data, search_key): for key, value in data.items(): if key == search_key: return value if isinstance(value, dict): result = deep_search(value, search_key) if result: return result return None # 执行查找操作 result = deep_search(data, "key221") print(result) 输出结果为:value221 可以看出,深度遍历方法可以非常有效地在多层嵌套字典查找到所需的数据Python开发人员掌握。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值