我有一个嵌套字典,与描述in this link非常相似。
用户arainchi在那里发布了以下功能:
def findkeys(node, kv):
if isinstance(node, list):
for i in node:
for x in findkeys(i, kv):
yield x
elif isinstance(node, dict):
if kv in node:
yield node[kv]
for j in node.values():
for x in findkeys(j, kv):
yield x
如果我这样做
print (list(findkeys(d, 'id')))
打印给定键的子项作为生成器对象类型。
当我尝试时,按
列出键()print ((findkeys(d, 'id')).keys())
我正在
AttributeError: 'generator' object has no attribute 'keys'
如何获取被检索儿童的钥匙?
示例:
cfg_dict = { 'mobile' :
{ 'checkBox_OS' :
{ 'status' : 'None',
'radioButton_Andriod' :
{ 'status' : 'None',
'comboBox_Andriod_Brands' : 'LG'},
'radioButton_Windows' :
{ 'status' : 'None',
'comboBox_Windows_Brands' : 'Nokia'},
'radioButton_Others' :
{ 'status' : 'None',
'comboBox_Others_Brands' : 'Apple'}},
'checkBox_Screen_size' :
{ 'status' : 'None',
'doubleSpinBox_Screen_size' : '5.0' }}
}
print ("findkeys: ", findkeys(self.cfg_dict, "radioButton_Andriod"))
print ("list of findkeys:", list(findkeys(self.cfg_dict, "radioButton_Andriod")))
print ("keys of findKeys:", list(findkeys(self.cfg_dict, "radioButton_Andriod"))[0].keys())
输出:
findkeys: <generator object findkeys at 0x02F0C850>
list of findkeys: [{'status': False, 'comboBox_Andriod_Brands': 'Sony'}]
keys of findKeys: dict_keys(['status', 'comboBox_Andriod_Brands'])
我想迭代孩子的钥匙。 像,
#pseudo code
for everykey in child.keys()
if everykey.value == "this":
#do this
else:
#do that
答案 0 :(得分:2)
list(findkeys(d, 'id'))[0].keys()
找到第一个孩子的钥匙。如果它不是一个字典,它将会出错,所以你可能需要检查
编辑:根据您在新编辑中提出的要求
for value in findkeys(d, 'id'):
for child_key, child_value in value.items():
if child_value == 'this':
# do this
else:
# do that
答案 1 :(得分:0)
我为此做了一个pypi包。您可以在这里参考https://test.pypi.org/project/dictnodefinder/1.0.1.dev1/
先安装
pip install dictnodefinder
然后像这样使用它
import dictnodefinder
source = {‘a’:{‘b’:0}}
key_to_find = ‘b’
print(dictnodefinder.findkeys(source, key_to_find))