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

如何遍历和搜索python字典?

阚原
2023-03-14
问题内容

我有嵌套的字典:

{'key0': {'attrs': {'entity': 'p', 'hash': '34nj3h43b4n3', 'id': '4130'},
          u'key1': {'attrs': {'entity': 'r',
                              'hash': '34njasd3h43b4n3',
                              'id': '4130-1'},
                    u'key2': {'attrs': {'entity': 'c',
                                        'hash': '34njasd3h43bdsfsd4n3',
                                        'id': '4130-1-1'}}},
          u'key3': {'attrs': {'entity': 'r',
                              'hash': '34njasasasd3h43b4n3',
                              'id': '4130-2'},
                    u'key4': {'attrs': {'entity': 'c',
                                        'hash': '34njawersd3h43bdsfsd4n3',
                                        'id': '4130-2-1'}},
                    u'key5': {'attrs': {'entity': 'c',
                                        'hash': '34njawersd3h43bdsfsd4n3',
                                        'id': '4130-2-2'}}}},
 'someohterthing': 'someothervalue',
 'something': 'somevalue'}

给出的id -所有的一个ids41304130-2-2
导航到正确词典的最简单方法是什么?

就像如果给定id4130-2-1那样,它应该到达字典key=key5

非xml方法,请。

编辑(1): 筑巢之间14的水平,但我知道我之前解析嵌套。

Edit(2) :修复了代码。

编辑(3):再次修复了字符串值的代码ids。请原谅造成的混乱。我希望这是最终的:)


问题答案:

您的结构不规则。这是带有遍历子词典的 Visitor 函数的版本attrs

def walkDict( aDict, visitor, path=() ):
    for  k in aDict:
        if k == 'attrs':
            visitor( path, aDict[k] )
        elif type(aDict[k]) != dict:
            pass
        else:
            walkDict( aDict[k], visitor, path+(k,) )

def printMe( path, element ):
    print path, element

def filterFor( path, element ):
    if element['id'] == '4130-2-2':
        print path, element

您将像这样使用它。

walkDict( myDict, filterFor )

这可以变成生成器而不是 访客 ; 它会yield path, aDict[k]而不是调用访问者函数。

您可以在for循环中使用它。

for path, attrDict in walkDictIter( aDict ):
    # process attrDict...


 类似资料:
  • 编写一个函数,如果给定的二叉搜索树包含给定的值,则返回1,否则返回0。 例如,对于以下树: N1(值:1,左:null,右:null) n2(值:2,左:n1,右:n3) N3(值:3,左:null,右:null) 对contains(&n2,3)的调用应返回1,因为根位于n2的树包含编号3。 函数应该返回1,然而,它返回0或者根本不返回。

  • 问题内容: 例如,假设我想列出一个字符串中每个字母的频率。最简单的方法是什么? 这是我在想的一个例子…问题是如何使allTheLetters等于所说的字母,而没有allTheLetters =“ abcdefg … xyz”之类的东西。在许多其他语言中,我可以只做字母+ +来增加字母的顺序,但是到目前为止,我还没有找到在python中做到这一点的方法。 问题答案: 您所问的问题(如何遍历字母)与您

  • 主要内容:src/runoob/binary/LevelTraverse.java 文件代码:二分搜索树的层序遍历,即逐层进行遍历,即将每层的节点存在队列当中,然后进行出队(取出节点)和入队(存入下一层的节点)的操作,以此达到遍历的目的。 通过引入一个队列来支撑层序遍历: 如果根节点为空,无可遍历; 如果根节点不为空: 先将根节点入队; 只要队列不为空: 出队队首节点,并遍历; 如果队首节点有左孩子,将左孩子入队; 如果队首节点有右孩子,将右孩子入队; 下面依次演示如下步骤: (1)先取出

  • 问题内容: 如何遍历由空行分隔的线段?该文件如下所示: 我想遍历这些块并在3列列表中获取“名称”,“姓氏”和“年龄”字段: 问题答案: 这是使用itertools.groupby的另一种方法。该函数遍历文件的每一行并为每行调用。返回True或False(称为),然后对产生相同True或False结果的所有连续行进行分组。 这是将行收集到组中的一种非常方便的方法。

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

  • 问题内容: 如何遍历Java中的字符串? 我正在尝试使用foreach样式进行循环 问题答案: 如果要使用增强循环,可以将字符串转换为charArray