使用嵌套键查找字符串访问python dict

发布于 2021-01-29 15:22:57

我正在寻找在python中创建一个简单的嵌套“查找”机制的方法,并希望确保在python的庞大库中没有隐藏的东西在创建它之前没有这样做。

我正在考虑采用这样的格式的字典

my_dict = { 
  "root": { 
    "secondary": { 
      "user1": { 
          "name": "jim", 
          "age": 24 
      }, 
      "user2": { 
        "name": "fred", 
        "age": 25 
      } 
    } 
  } 
}

我正在尝试一种使用十进制表示法访问数据的方法,该方法类似于

root.secondary.user2

然后将结果字典返回作为响应。我认为必须有某种方法可以做到这一点,并且我可以很容易地编写一个,但是我想确保自己不会重新创建文档中可能缺少的内容。谢谢

关注者
0
被浏览
40
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    标准库中没有用于此目的的东西,但是自己编写代码很容易:

    >>> key = "root.secondary.user2"
    >>> reduce(dict.get, key.split("."), my_dict)
    {'age': 25, 'name': 'fred'}
    

    这利用了以下事实:k字典中对关键字的查找d可以写为dict.get(d, k)。使用迭代地应用此操作可获得reduce()预期结果。

    编辑 :为了完整性,使用此方法可以获取,设置或删除字典键的三个功能:

    def get_key(my_dict, key):
        return reduce(dict.get, key.split("."), my_dict)
    
    def set_key(my_dict, key, value):
        key = key.split(".")
        my_dict = reduce(dict.get, key[:-1], my_dict)
        my_dict[key[-1]] = value
    
    def del_key(my_dict, key):
        key = key.split(".")
        my_dict = reduce(dict.get, key[:-1], my_dict)
        del my_dict[key[-1]]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看