【发布时间】:2018-07-19 03:43:22
【问题描述】:
我在 stackoverflow 上进行了搜索,发现以下代码允许我递归地搜索嵌套 dict 中的键值。但是,我还想跟踪外部字典的键值。我该怎么做?
从下面链接中 Alfe 的回答中,我可以使用下面的代码获取嵌套字典中键的所有值。 Find all occurrences of a key in nested python dictionaries and lists
data = {'item1': {
'name': 'dummy',
'type': 'dummy1'},
'item2': {
'name': 'dummy',
'type': 'dummy1',
'label':'label2'
},
'item3': {
'name': 'dummy',
'type': 'dummy1',
'label':'label3'},
'item4': {
'name': 'dummy',
'type': 'dummy1'}
}
def find(key, dictionary):
for k, v in dictionary.items():
if k == key:
yield v
elif isinstance(v, dict):
for result in find(key, v):
yield result
elif isinstance(v, list):
for d in v:
for result in find(key, d):
yield result
In[1]:list(find('label', data))
Out[1]:
['label2', 'label3']
但是,我还需要记录外部 dict 键,如下所示。我该怎么做?此外,我的数据可能有不止一层。
{'item2':'label2',
'item3':'label3'
}
我还发现此链接中的 recursive_lookup 写得非常整齐。但是,当我尝试运行它时,它会返回 None。
Find keys in nested dictionary
def recursive_lookup(k, d):
if k in d:
return d[k]
for v in d.values():
if isinstance(v, dict):
return recursive_lookup(k, v)
return None
当我调用 recursive_lookup('label', data) 时,它正在返回 None。
如果有人可以为我指出为什么上面的代码不起作用,那也太好了!
【问题讨论】:
标签: python dictionary nested