【问题标题】:How can I access value in nested dictionary using a single key?如何使用单个键访问嵌套字典中的值?
【发布时间】:2021-03-17 07:06:05
【问题描述】:

假设我有一个嵌套字典,它是从 pickle 文件中提取的,包含各种级别,我想通过只给出最后一个键来获取值。考虑到自己的“分支”,键是唯一的。

主要问题是我有多个键和级别:

 dict = {
    
    'A': {
        
        'X': {
            1: [...],
            2: [...]
        },
        
        'Y': {
            3: [...],
            4: [...]
        }
    }
    
    'B': {
        
        'G': {
            
            'H': {
                
                'Z': [...]
            }
        }
    }
    
    'C': [...]
 
 }

我该怎么做?

【问题讨论】:

  • 能不能加个字典的例子
  • en.wikipedia.org/wiki/Tree_traversal。如果您的密钥不是唯一的,您必须告诉我们您想要哪个值。
  • 为什么要清除已接受的答案标志?我的解决方案有什么问题吗?
  • 是的,问题是如果我们有多个键和级别,它就不起作用
  • 首先,你的字典有语法问题。其次,我仍然不知道您在寻找什么。您是否可以在您正在查看的键/预期结果之后添加一个示例?字典没有“分支”,它有键和值。

标签: python dictionary nested pickle


【解决方案1】:

一个简单的解决方案是一个 recusive 函数,它甚至适用于嵌套的嵌套字典

outer_dict = {'outer': {'inner': 10, 'even_inner': {'innerst': 25}}}

和功能:

def get_val(search_dict, key):
    """ recursive searching the dict """
    for elem in search_dict:
        if elem == key:
            return search_dict[elem]
        if isinstance(search_dict[elem], dict):
            retval = get_val(search_dict[elem], key)
            if retval is not None:
                return retval
value = get_val(outer_dict, 'innerst')
print(value)
>> 25

问题: 如果密钥不是唯一的,您将只获得第一个匹配项。如果键可以多次出现,您将需要一个列表来填充值。

下次请举个例子!

【讨论】:

  • 不幸的是,这仅在存在单数键时才有效。我该如何解决?您可以在描述中查看示例
  • 我编辑了多个键。但是这个解决方案仍然只适用于唯一键,如果这不是预期的用例,你将不得不填写一个列表。
  • 键是唯一的。您的新解决方案有效,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2021-03-04
  • 2018-02-09
相关资源
最近更新 更多