问题描述
我想使用字符串访问字典的元素。 例如,我有这样的字典:
data = {"masks": {"id": "valore"}}
我有一个字符串campo="masks,id"
我想用此campo.split(',')
拆分此字符串。
我获得['masks', 'id']
,并由此访问元素data["masks"]["id"]
。
这本词典就是一个例子,我的词典比较复杂。
的一点是,我想要访问的元素data["masks"]["id"]
与输入字符串"masks,id"
,或者向元件data["masks"]
以字符串"masks"
,并元素data["masks"]["id"]["X"]
与输入字符串"masks,id,X"
等。
我怎样才能做到这一点?
1楼
关键是您提出的要求与python内置词典的功能不匹配。
如果您想使用嵌套映射来对单个键字符串(例如"masks, id, X"
进行这种自动“拆分”,那么您将必须自己实现。
换句话说:答案是-内置词典无法为您做到这一点。
因此,这里要做的“实际”事情:退后一步,仔细研究您的需求以确切地了解您想做什么; 以及为什么要这么做。 然后从那里寻找最好的设计来支持它。
从实现方面来看,我认为您的“需求”大致如下:
- 检查提供的“键”是否匹配“键1,键2,键3”
- 如果是这样,请将该键拆分为子键
-
然后检查“出字典”是否具有
key1
的值 -
然后检查
key1
的值是否为字典 -
然后检查“内部”字典是否具有
key2
的值...
等等。
2楼
但是,我不建议您使用以下方法,因为python dict
并不意味着按您希望的方式进行访问,但是由于在Python中您可以自行承担更改对象类型的风险,因此我想附上摘要,即可为您完成工作。
因此,我要做的是遍历键,并在每次迭代时获取存在的子词典,否则放入空词典.get()
使用的.get()
方法.get()
,如果未找到键,则返回空字典。
data = {"masks": {"id": "valore"}}
text = "masks, id"
nested_keys = text.split(", ")
nested_dict = data
for key in nested_keys:
nested_dict = nested_dict.get(key, {})
if (isinstance(nested_dict, str)):
print nested_dict