【问题标题】:Looping over Nested Dictionaries within a Loop在循环内循环嵌套字典
【发布时间】:2021-05-30 00:30:20
【问题描述】:

所以我找到了这两个资源: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)

【问题讨论】:

  • 请通过intro tourhelp centerhow to ask a good question 了解本网站的运作方式并帮助您改进当前和未来的问题,从而帮助您获得更好的答案。 “教我这些语言功能”对于 Stack Overflow 来说是题外话。 Stack Overflow 并不打算取代现有的教程和文档。您只需一次完成每一层嵌套。
  • 您认为 Stack Overflow 的用途是什么?我为我的问题创建了一个最小的可重现示例。我想我的问题很清楚。我在这里查看了资源:holypython.com/intermediate-python-lessons/… 和这里towardsdatascience.com/… 并且无法理解某些内容,所以我不确定您对 SO 有什么想法,但我的理解是这就是该站点的用途。
  • 最大的问题是,你想用这个做什么?您的子词典都有不同的键,因此没有明显的方法来整理它们。这使得迭代难以定义。你可以通过nested_lst3[0]['camera']['color']获取相机的颜色,但这不是你的问题。
  • 我的意思是你的数据结构没有用。让我们弄清楚您想要做什么,这将决定您如何存储它以便于访问。
  • 谢谢,所以我理解你所说的数据结构没有用,这是很好的说明。假设我想将这些值附加到一个列表中,我将在我的问题中更新该列表。我的主要语言是 R,所以我不经常使用 for 循环,而且在我正在学习的研究生 Python 课程中,并非所有内容似乎都嵌入了解决问题的最实用方法。

标签: python dictionary


【解决方案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

【讨论】:

  • 完美!这很有帮助。那么当你写“break statement since you only want the first nested dictionary”时,如果我有另一个嵌套字典,我是否不仅要取出break,还要添加另一个for循环?
猜你喜欢
  • 2017-07-22
  • 2022-06-15
  • 2021-07-16
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
相关资源
最近更新 更多