在循环中循环嵌套字典

时间:2021-02-28 04:51:27

标签: python dictionary

所以我找到了这两个资源:Iterating over list of dictionariesNested dictionary comprehension python

但我是 Python 新手,无法理解不同结构中的嵌套结构(列表中的嵌套字典,或字典中的嵌套列表。

例如,如果我试图在相机中获取字典(因此“color”:“black”,“res”:16 的关键项对,然后将其附加到列表中。

非常感谢!

*updating below to append to a list.

nested_lst3 = [{"camera":{"color": "black", "res": 16}, "phone":1}, {"car":{"amount": 1, "year": 2017, "color": "red"}, "van":0}]
def get_values(d):
  for i in d:
    for key in d[i]:
        l.append(key)
  return(l)

#or this

def get_values(d):
  for i in d:
    for key, values in d[i]:
      if type(values) is dict:
        get_values(values)
      else:
        print(key, ":", value)

get_values(nested_lst3)

1 个答案:

答案 0 :(得分:1)

如果你想要一个只能得到 {"color":"black", "res":16} 的函数,那么你可以这样做:

def get_values(d):
    s = {}
    for i in range(len(d)):
        temp = d[i]
        s = temp[list(temp.keys())[0]]
        break
    return s

它的作用是遍历嵌套列表变量。因为您需要有一个键才能访问字典中的值,所以您可以在列表中一个接一个,然后在每次迭代时取第一个键,`temp = d[i]'

在这种方法中,假设我们已经知道字典中的第一个值将是另一个字典。所以我们只取键,(list(temp.keys())[0] 列出字典中存在的键),然后取第一个。

我添加了一个 break 语句,因为您只想要第一个嵌套字典,但是如果您要取出 break,它将检索每个嵌套字典(假设它们都位于第一个嵌套字典的值位置。 编辑: 如果你希望它返回一个包含字典的数组:

def get_values(d):
        s = []
        for i in range(len(d)):
            temp = d[i]
            s.append(temp[list(temp.keys())[0]])
            break
        return s