如何访问字典中所有键的值?

时间:2019-02-13 19:28:58

标签: python dictionary

我有一本里面有字典的字典。我正在尝试访问其中的键中的所有值。所以我有:

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

我该如何获取字典中的所有值?

感谢您的帮助!

4 个答案:

答案 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]