我怎样才能扁平化一个字典列表?

Posted

技术标签:

【中文标题】我怎样才能扁平化一个字典列表?【英文标题】: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 【参考方案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 字段。我编辑我的问题以添加有关我的请求的更多详细信息和信息

以上是关于我怎样才能扁平化一个字典列表?的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能完全展平一个列表(列表(列表)......)

我怎样才能完全展平一个列表(列表(列表)......)

Python 3:扁平化嵌套字典和字典中的列表

使用 pandas json_normalize 扁平化包含多个嵌套列表的字典列表

扁平化仅包含一个 dict 的列表

如何更有效地将嵌套列表扁平化为一个列表而不是使用 unlist 方法?