加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 将String转换为多级字典键?

发布时间:2020-12-20 12:04:42 所属栏目:Python 来源:网络整理
导读:我让用户能够检查多级字典中的特定键.我的想法是他们会像这样将路径传递给密钥: root.subelement1.subelement2.key 这可以是任意长度和深度. 一旦我有了用户的字符串(上面),我将拆分它并获得每个组件的列表: elements = ['root','subelement1','subelement
我让用户能够检查多级字典中的特定键.我的想法是他们会像这样将路径传递给密钥:

root.subelement1.subelement2.key

这可以是任意长度和深度.

一旦我有了用户的字符串(上面),我将拆分它并获得每个组件的列表:

elements = ['root','subelement1','subelement2','key']

所有这些我都能做到.接下来的部分是我被困住的地方.当它是任意长度时,如何查询由上面指定的字典键?

我最初的想法是做一些像my_dict [elements [0]] [elements [1]] ……但是当我的用户没有准确传递我期望的长度时,这不会扩展或工作.

在这种情况下,如何以任意键深度获取数据?

几个例子:

>用户通过country.US.NewYork =>我查询`my_dict [‘country’] [‘US’] [‘NewYork’]
>用户通过department.accounting =>我查询my_dict [‘department’] [‘accounting’]
>用户通过id =>我查询my_dict [‘id’]
>用户通过district.District15.HenryBristow.principal =>我查询my_dict [‘district’] [‘District15’] [‘HenryBristow’] [‘principal’]

解决方法

你可以使用 reduce来查询嵌套词典中的键:

q = "district.District15.HenryBristow.principal"
my_dict  = {"district" : {"District15" : {"HenryBristow" : {"principal" : 12}}}}

from functools import reduce  # python 3 only

print(reduce(lambda x,y : x[y],q.split("."),my_dict))

结果:

12

如果您想避免在此路径中不存在数据的情况下捕获KeyError,则可以使用带有默认值的get作为空字典:

reduce(lambda x,y : x.get(y,{}),my_dict)

尝试获取未知值会返回一个空字典.唯一的缺点是你不知道路径到底在哪里丢失,所以也许保留KeyError不会那么糟糕:

try:
    v = reduce(lambda x,my_dict)
except KeyError as e:
    print("Missing key: {} in path {}".format(e,q))
    v = None

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读