gpt4 book ai didi

python - 将字符串转换为多级字典键?

转载 作者:太空宇宙 更新时间:2023-11-03 12:54:35 25 4
gpt4 key购买 nike

我让用户能够检查多级字典中的特定键。我的想法是他们将像这样传递 key 的路径:

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,{}),q.split("."),my_dict)

尝试获取未知值会返回一个空字典。唯一的缺点是您不知道路径从哪里 丢失了,所以可能引发KeyError 并不是那么糟糕:

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

关于python - 将字符串转换为多级字典键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47755080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com