当前位置: 首页 > 面试题库 >

遍历嵌套字典并在Python中获取路径?

郭修平
2023-03-14
问题内容

我有一本字典,例如:

{
   "checksum": "b884cbfb1a6697fa9b9eea9cb2054183",
   "roots": {
      "bookmark_bar": {
         "children": [ {
            "date_added": "12989159740428363",
            "id": "4",
            "name": "test2",
            "type": "url",
            "url": "chrome://bookmarks/#1"
         } ],
         "date_added": "12989159700896551",
         "date_modified": "12989159740428363",
         "id": "1",
         "name": "bookmark_bar",
         "type": "folder"
      },
      "other": {
         "children": [ {
            "date_added": "12989159740428363",
            "id": "4",
            "name": "test",
            "type": "url",
            "url": "chrome://bookmarks/#1"
         } ],
         "date_added": "12989159700896557",
         "date_modified": "0",
         "id": "2",
         "name": "aaa",
         "type": "folder"
      },
      "synced": {
         "children": [  ],
         "date_added": "12989159700896558",
         "date_modified": "0",
         "id": "3",
         "name": "bbb",
         "type": "folder"
      }
   },
   "version": 1
}

一切都始于“根”,它们有两种类型的数据:URL和文件夹,它们是字典。如果是文件夹,则必须具有键“
children”,该键的值是一个列表,我们可以在其中放置更多URL和文件夹。

现在,我想遍历此嵌套字典,以获取所有子文件夹中的URL,因此我编写了一个函数:

def traverse(dic):
    for i in dic:
        if i['type'] == 'folder':
            for j in traverse(i['children']):
                yield j
        elif i['type'] == 'url':
            yield i

我可以这样使用它:

traverse(dictionary['roots']['bookmark_bar']['children'])

完美运作。但是它只是生成URL的字典,我不知道它在哪里。我也想走这条路。我该怎么做?


问题答案:

如果我得到了您想要的东西,就不要确定,但是您可能想要这样做:

def traverse(dic, path=None):
    if not path:
        path = []
    for i in dic:
        local_path = path[:].append(i)
        if i['type'] == 'folder':
            for j in traverse(i['children'], local_path):
                yield j, local_path
        elif i['type'] == 'url':
            yield i, local_path

现在,您的函数会产生该项目和一系列键,以便在特定位置到达该项目。



 类似资料:
  • 问题内容: 我有一个嵌套的数据结构。我想使用模块读取其键和值。数据结构像下面这样。 我试图使用波纹管方式读取字典中的键,但出现错误。 码 错误 所以任何人都可以解释错误的原因以及如何遍历字典。 问题答案: 作为请求的输出,代码如下所示 代替您也可以使用,但是效率更高并且返回迭代器。 希望这可以帮助 :)

  • 问题内容: 我试图遍历字典并打印出所有值不是嵌套字典的键值对。如果值是字典,我想进入它并打印出它的键值对…等等。有什么帮助吗? 这个怎么样?它仍然只打印一件事。 完整的测试用例 字典: 结果: 问题答案: 如Niklas所说,你需要递归,即你想定义一个函数来打印你的字典,如果值是一个dict,则想使用这个新字典来调用你的打印函数。 就像是 : 或从Python 3开始:

  • 问题内容: 我对Xcode在《 Swift编程语言指南》中给我进行此实验的答案感到有些困惑: 我知道随着字典的使用,最大的数字被设置为变量。但是,我对为什么Xcode会说要根据每次测试设置5次,1次或3次感到困惑。 查看代码时,我发现应该单独在“ Prime”中将其设置6次(2、3、5、7、11、13)。然后,它应该跳过“斐波那契”中的任何数字,因为这些数字都小于最大数字,该数字当前已从“ Pri

  • 本文向大家介绍Python中的字典遍历备忘,包括了Python中的字典遍历备忘的使用技巧和注意事项,需要的朋友参考一下 备忘一下python中的字典如何遍历,没有什么太多技术含量.仅供作为初学者的我参考. interitems和iterms区别 参考 http://stackoverflow.com/questions/10458437/python-what-is-the-difference-

  • 问题内容: 我正在尝试获取Firebase中嵌套节点的密钥,但不确定如何执行此操作。 例如在这种情况下: 例 我怎么知道1之内有2,3,4? 我正在考虑将值分别放在Firebase中的列表中。但是,有没有更聪明的方法呢?是否有更有效的方法来获取Firebase中所有嵌套节点的密钥? 问题答案: 在Android中 允许访问此快照的所有直接子级。可以在本机for循环中使用: 在iOS中 斯威夫特3:

  • 问题内容: 我的代码是 似乎可以很好地打印索引= 0的字典键的值。 但是对于我的一生,我无法弄清楚如何将for循环放入for循环中,以循环访问未知数量的字典。 问题答案: 你可以只遍历的索引的你的: 或者您可以使用带有计数器的while循环: 您甚至可以直接遍历列表中的元素: 只需迭代字典的值,甚至可以不进行任何查找: 或将迭代包装在列表理解或生成器中,然后再将其解压缩: 可能性是无止境。选择哪种