我有一本里面有字典的字典。我正在尝试访问其中的键中的所有值。所以我有:
d = {'key': 1, 'next': {'key': 5, 'next': {'key': 6, 'next': None}}}
我希望获得“ key”的所有值,所以如果一切顺利的话,我会得到:
1 5 6 None
我认为基本的循环会完成这项工作,就像这样:
for i in d:
print(d['key'])
但我不断得到:
1
1
我该如何获取字典中的所有值?
感谢您的帮助!
答案 0 :(得分:3)
这是新手友好的方法:
d = {'key': 1, 'next': {'key': 5, 'next': {'key': 6, 'next': None}}}
current = d
while current: # while current isn't None
print(current['key']) # print the current element
current = current['next'] # Walk forward in the structure
我个人更喜欢递归地进行操作:
def recursive(element):
print(element['key']) # print the current element
if element['next']: # If there is a next
recursive(element['next']) # call the same function on it
recursive(d)
递归的优点是没有“状态”(没有变量)。而且该函数更可预测,因为它不依赖于变量的正确初始化。
答案 1 :(得分:0)
您可以使用递归:
d = {'key': 1, 'next': {'key': 5, 'next': {'key': 6, 'next': None}}}
def all_vals(_d, _param = 'key'):
for a, b in _d.items():
if a == _param:
yield b
if isinstance(b, dict):
yield from all_vals(b, _param)
print(list(all_vals(d)))
输出:
[1, 5, 6]
答案 2 :(得分:0)
使用递归函数是一种出路:
def recursive(d, result):
result.append(d['key'])
if 'next' in d and not (d['next'] == None):
recursive(d['next'], result)
return result
d = {'key': 1, 'next': {'key': 5, 'next': {'key': 6, 'next': None}}}
print(recursive(d, []))
答案 3 :(得分:0)
nested_lookup module提供了许多Python函数,可用于 深度嵌套的文档
以您的情况
from nested_lookup import nested_lookup
d = {'key': 1, 'next': {'key': 5, 'next': {'key': 6, 'next': None}}}
print(nested_lookup('key', d))
输出:
[1, 5, 6]