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

链式嵌套dict()在python中获得调用

薛宏壮
2023-03-14
问题内容

我正在使用dict.get(’keyword’)方法查询嵌套字典。目前我的语法是…

M = cursor_object_results_of_db_query

for m in M:
    X = m.get("gparents").get("parent").get("child")
    for x in X:
        y = x.get("key")

但是,有时“父”或“子”标签之一不存在,并且我的脚本失败。我知道使用get()我可以在表单的键不存在的情况下包括默认值…

get("parent", '') or
get("parent", 'orphan')

但是,如果我有任何Null''或清空我能想到的,在链接.get("child")上调用时失败''.get("child"),因为""没有方法.get()

我现在解决这个问题的方法是try-except在每个.get("")调用周围使用一连串的顺序,但这似乎是愚蠢的,而且是非Python的-
是否有一种方法可以默认返回值"skip""pass"或者仍然可以支持链接并智能地失败的方法,而不是深层的-潜入不存在的键?

理想情况下,我希望这是以下形式的列表理解:

[m.get("gparents").get("parent").get("child") for m in M]

但是当父母不在场导致.get("child")调用终止我的程序时,目前这是不可能的。


问题答案:

由于这些都是python,dict并且您正在dict.get()对它们调用方法,因此可以使用空dict链接:

[m.get("gparents", {}).get("parent", {}).get("child") for m in M]

取消最后一个的默认设置,.get()您将退回到None。现在,如果找不到任何中间键,则链的其余部分将使用空字典来查找内容,并以.get('child')return终止None



 类似资料:
  • 问题内容: 我有一个方法,我已经分解成一些较小的嵌套函数来分解代码库: 有没有一种方法可以单独运行其中一个嵌套函数。例如: 编辑: 我正在尝试在使用pyramid_breaker构建的Web服务器上设置缓存 这是我的理解可能不准确: 现在我有这个原因是因为装饰器用来创建缓存键的名称空间是从函数和争论中产生的。因此,您不能仅将装饰器放在getThis上,因为请求变量是唯一的,并且缓存是无用的。所以我

  • 问题内容: 我需要根据上一个调用中的数据连续进行6个ajax调用。我将每个呼叫嵌套在上一个呼叫的成功中。我的问题是格式化代码的最佳方法是什么,以使编辑器中的代码行数不超过一百万行? 忽略方括号,语法对于这个问题并不重要。 问题答案: 你可以做这样的事情

  • 我得到了我想要的顺序,但我不知道如何添加每个元组开头的数字,这些数字声明了国家的等级。此外,我不确定嵌套字典的输入验证是否好,或者它是否只适用于第一个字典。

  • 问题内容: 以下两个表达式似乎与我等效。哪一个更好? 结果是相同的,但是哪个版本更好或更确切地说是pythonic? 我个人觉得版本2更难理解,对我而言setdefault非常难以掌握。如果我理解正确,它将在字典中查找“键”的值(如果不可用),在字典中输入“ []”,返回对该值或“ []”的引用,并在该值后附加“ val”参考。虽然肯定很平滑,但至少(至少对我而言)不是直观的。 在我看来,版本1更

  • 问题内容: 我有一本字典,例如: 一切都始于“根”,它们有两种类型的数据:URL和文件夹,它们是字典。如果是文件夹,则必须具有键“ children”,该键的值是一个列表,我们可以在其中放置更多URL和文件夹。 现在,我想遍历此嵌套字典,以获取所有子文件夹中的URL,因此我编写了一个函数: 我可以这样使用它: 完美运作。但是它只是生成URL的字典,我不知道它在哪里。我也想走这条路。我该怎么做? 问

  • 问题内容: 我想复制一个2D列表,以便如果我修改一个列表,则不修改另一个列表。 对于一维列表,我只是这样做: 现在,如果我修改了b,a就不会修改。 但这不适用于二维列表: 如果我修改了b,a也会被修改。 我该如何解决? 问题答案: 对于不管尺寸多少都可以工作的更通用的解决方案,请使用: