当前位置: 首页 > 知识库问答 >
问题:

极嵌套字典

马绪
2023-03-14

我正在努力编写一本嵌套非常多的词典。只有当字典中有“name”:“bingo”时,我才需要获取字典的“main_id”。

example_dict = [{'main_id': 10000,
             'example_field': {'group': {'count': 3, 'results': [{'id': 1, 'name': 'AAA'}, {'id': 2, 'name': 'BBB'},
                                                                 {'id': 3, 'name': 'CCC'}]}}},
            {'main_id': 20000,
             'example_field': {
                 'group': {'count': 3, 'results': [{'id': 1, 'name': 'AAA'}, {'id': 2, 'name': 'BBB'},
                                                   {'id': 3, 'name': 'bingo'}]}}}
            ]

我有解决办法,但在我看来是相当丑陋的。

for elem in example_dict:
result = ([elem for elem in elem['example_field']['group']['results'] if elem.get('name') == 'bingo'])
if result:
    main_id = elem['main_id']
    print(main_id)

我想知道:

  • 有更好更干净的方法来实现它(总是;)

共有1个答案

谈炳
2023-03-14

我猜您的dicts具有规则的结构-在这种情况下,您可以使用一些库将其解析到类中,pydantic可能是一个不错的选择:

from typing import List
from pydantic.main import BaseModel


class Field(BaseModel):
    id: int
    name: str


class Main(BaseModel):
    fields: List[Field]


d = {"fields": [{"id": 1, "name": "a"}, {"id": 2, "name": "b"}]}

c = Main(**d)
print(c)

这只是一个示例,但可以有更多嵌套类。使用它,您只需在c.fields中编写[f代表f,如果f.name==“bingo”]

 类似资料:
  • 问题内容: 我在理解Python3中的嵌套字典理解时遇到了麻烦。从下面的示例中得到的结果输出的是正确的结构,没有错误,但仅包含一个内部键:值对。我还没有找到像这样的嵌套字典理解的例子。谷歌搜索“嵌套词典理解python”显示了遗留示例,非嵌套理解或使用其他方法解决的答案。我可能使用了错误的语法。 例: 此示例应返回原始字典,但内部值由修改。 outside_dict词典的结构以及结果: 问题答案:

  • 问题内容: 假设我有一个像这样的领域模型: 现在,我可以像这样创建一个教师比较器: 但是,我如何像这样在嵌套字段上比较Lecture? 我无法在模型上添加方法。 问题答案: 您不能嵌套方法引用。您可以改用lambda表达式: 无需反向顺序,它就不再那么冗长了: 注意:在某些情况下,您需要明确声明泛型类型。对于 例如,下面的代码不会没有工作,之前在Java中8。 较新的Java版本具有更好的自动类型

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

  • 我的数据如下所示: 内部数组的长度始终相同。键1、键2、键3也始终相同。 我想将其转换为熊猫DataFrame,其中outer_key1,outer_key2,...是索引,key1,key2,key3是列。 编辑: 数据中存在一个问题,我认为这就是给定解决方案不起作用的原因。在少数情况下,内部数组中有三个s,而不是三个字典。这样地:

  • 问题内容: 我只想获取嵌套字段,但不能,因为它不是叶字段。 我在下面尝试过,但是无法匹配嵌套对象中的每个ID和名称。 结果: 这是我的预期结果: 问题答案: 如果您没有某个查询应以某种方式匹配嵌套字段,则可以这样进行: 如果您还有一个查询,并且想返回 匹配 的 嵌套文档,则 可以这样操作(使用):

  • 问题内容: 我在ng-table中有一张发票清单,希望能够对嵌套属性进行过滤。json看起来像这样; 我的看法是这样的 我想让过滤工作于client.fullname。如何过滤嵌套属性? 更新资料 我找到了一种解决方法,将嵌套字段放入非嵌套的JSON元素中,在上面的示例中,我创建了一个JSON [‘client_name’]元素并将其分配给rails模型中的client.fullname。然后,筛