我有一本字典,像这样
{a:{b:{c:{d:2}}}, e:2, f:2}
我该如何获取d的值并在python中更改它呢?前面的问题只展示了如何获得嵌套的级别,而没有展示如何获得值。在这种情况下,我不知道字典的嵌套级别。任何帮助都将不胜感激,谢谢!附言:我使用的是python 3
发布于 2019-03-21 09:20:49
那么一些递归呢?
def unest(data, key):
if key in data.keys():
return data.get(key)
else:
for dkey in data.keys():
if isinstance(data.get(dkey), dict):
return unest(data.get(dkey), key)
else:
continue
d = {'a':{'b':{'c':{'d':25}}}, 'e':2, 'f':2}
r = unest(d, 'd')
# 25
r = unest(d, 'c')
# {'d': 25}
编辑:正如Paul Rooney指出的那样,我们不必使用data.keys
,我们可以通过执行if key in data
来简单地迭代键
编辑2:给定您提供的输入,这将找到最深的级别,但是这不包括某些情况,例如,key e
也是一个嵌套字典,它在n
等于key a
的深度的情况下执行n + 1
级别。
def find_deepest(data):
if not any([isinstance(data.get(k), dict) for k in data]):
return data
else:
for dkey in data:
if isinstance(data.get(dkey), dict):
return find_deepest(data.get(dkey))
else:
continue
u = find_deepest(d)
# {'d': 2}
发布于 2021-05-01 00:35:35
我正在寻找类似的解决方案,但我希望在(可能)嵌套的字典中找到任何键的最深实例,并返回它的值。这假设您提前知道要搜索的关键字。我不清楚这是否是原始问题的有效假设,但我希望这能帮助其他人,如果他们偶然发现了这个帖子。
def find_deepest_item(obj, key, deepest_item = None):
if key in obj:
deepest_item = obj[key]
for k, v in obj.items():
if isinstance(v,dict):
item = find_deepest_item(v, key, deepest_item)
if item is not None:
deepest_item = item
return deepest_item
在这个例子中,'d‘键也存在于顶层:
d = {'a':{'b':{'c':{'d':25}}}, 'd':3, 'e':2, 'f':2}
v = find_deepest_item(d, 'd')
# 25
搜索“c”:
v = find_deepest_item(d, 'c')
# {'d': 25}
https://stackoverflow.com/questions/55272369
复制相似问题