【问题标题】:How can I flat a list of dicts?我怎样才能扁平化一个字典列表?
【发布时间】:2022-01-17 00:18:57
【问题描述】:

我有一个字典,其中包含一个列表product,它只包含一个字典:

dic = {
    "thickness": 90.0,
    "mass_surf": 37.8,
    "res_therm": 0.75,
    "codename": "codename1",
    "category": "category1",
    "sub_categories": [
        "sub_categories1"
    ],
    "secondary_targets": [
        "secondary_targets1",
        "secondary_targets2",
        "secondary_targets3"
    ],
    "product": [
        {
            "codename": "codename1",
            "purpose": "purpose1",
            "category": "category1",
            "material": "material1"
        }
    ]
}

我想将 dict 的product 列表变平以获得这个:

dic = {
    "thickness": 90.0,
    "mass_surf": 37.8,
    "res_therm": 0.75,
    "codename": "codename1",
    "category": "category1",
    "sub_categories": [
        "sub_categories1"
    ],
    "secondary_targets": [
        "secondary_targets1",
        "secondary_targets2",
        "secondary_targets3"
    ],
    "product.codename": "codename1",
    "product.purpose": "purpose 1",
    "product.purpose": "purpose1",
    "product.category": "category1",
    "product.material": "material1"
}

我该怎么做?

product 列表将始终只包含一项

【问题讨论】:

  • 如果产品列表有多个条目怎么办?
  • 不要命名字典dict,这是一个python内置
  • 产品列表总是只有一个产品,确实有点混乱,但是字段product是一个列表,因为返回了一个Mongo查询
  • 这能回答你的问题吗? Flat a list of containing only one dict

标签: python list dictionary flatten


【解决方案1】:

假设子列表中只有一项,您可以使用以下字典理解:

out = {'.'.join([k1,k2]) if k2 else k1: v2
       for k1,v1 in d.items()
       for k2,v2 in (v1[0] if isinstance(v1, list) else {None: v1}).items()
       }

输出:

{'product.codename': 'codename1',
 'product.name': 'name1',
 'product.category': 'category1',
 'message': 'message1'}

注意。如果您可以在列表中包含多个项目,请说明如何处理它们。

【讨论】:

  • 谢谢@mozway,我试过了,效果很好!但是,我想将其设计为仅平整 product 字段。我编辑我的问题以添加有关我的请求的更多详细信息和信息
猜你喜欢
  • 2021-09-17
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2022-11-26
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多