Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使用条件对dict列表进行分组_Python_List_Dictionary - Fatal编程技术网

如何在python中使用条件对dict列表进行分组

如何在python中使用条件对dict列表进行分组,python,list,dictionary,Python,List,Dictionary,我有一份下面的目录: events_list = [ {'attribute': '% Organic Matter - soil', 'event': 'Preharvest', 'stage': 'Preharvest', 'founder_mandated': True, 'ripe_mandated': False}, {'attribute': 'Cultivar', 'event': 'Preharvest', 'stage': 'Preharvest', 'founder_m

我有一份下面的目录:

events_list = 

[
{'attribute': '% Organic Matter - soil', 'event': 'Preharvest', 'stage': 'Preharvest', 'founder_mandated': True, 'ripe_mandated': False}, 
{'attribute': 'Cultivar', 'event': 'Preharvest', 'stage': 'Preharvest', 'founder_mandated': False, 'ripe_mandated': False}, 
{'attribute': 'Electrical conductivity', 'event': 'Preharvest', 'stage': 'Preharvest', 'founder_mandated': False, 'ripe_mandated': False}, 
{'attribute': 'Farm Acreage/tomato acreage', 'event': 'Preharvest', 'stage': 'Preharvest', 'founder_mandated': False, 'ripe_mandated': False}, 
{'attribute': 'Farm GPS coordinates', 'event': 'Preharvest', 'stage': 'Preharvest', 'founder_mandated': True, 'ripe_mandated': False}, 
{'attribute': 'Soil Amendment 1 date', 'event': 'Preharvest', 'stage': 'Preharvest', 'founder_mandated': True, 'ripe_mandated': False}, 
{'attribute': 'Air Temperature', 'event': 'Preharvest', 'stage': 'Preharvest', 'founder_mandated': True, 'ripe_mandated': False}, 
{'attribute': 'Activity Number', 'event': 'Shipping', 'stage': 'Transportation', 'founder_mandated': False, 'ripe_mandated': True}, 
{'attribute': 'Batch/Lot or Serial Number', 'event': 'Shipping', 'stage': 'Transportation', 'founder_mandated': True, 'ripe_mandated': True}, 
{'attribute': 'Data Owner', 'event': 'Shipping', 'stage': 'Transportation', 'founder_mandated': True, 'ripe_mandated': True}, 
{'attribute': 'Trading Partner', 'event': 'Shipping', 'stage': 'Transportation', 'founder_mandated': True, 'ripe_mandated': True}, 
{'attribute': 'Product Date', 'event': 'Shipping', 'stage': 'Transportation', 'founder_mandated': True, 'ripe_mandated': True}
{'attribute': 'Data Owner', 'event': 'Receiving', 'stage': 'Transportation', 'founder_mandated': True, 'ripe_mandated': True}, 
{'attribute': 'Product Date', 'event': 'Receiving', 'stage': 'Transportation', 'founder_mandated': True, 'ripe_mandated': True}, 
{'attribute': 'Product Identifier(s)', 'event': 'Receiving', 'stage': 'Transportation', 'founder_mandated': False, 'ripe_mandated': True}, 
{'attribute': 'Quantity', 'event': 'Receiving', 'stage': 'Transportation', 'founder_mandated': True, 'ripe_mandated': True}, 

]
在上面的列表中,我们有16个dict。在每个dict中,重要的键是
event
stage
。我必须重新格式化上述数据,使属于同一
事件
阶段
的所有
属性
键应位于1 dict之下,如下所示:

[
    {
        "event": "Preharvest",
        "stage": "Preharvest",
        "attributes": [
            {
                "attribute_name": "% Organic Matter - soil",
                "founder_mandated": True,
                "ripe_mandated": False
            },
            {
                "attribute_name": "Cultivar",
                "founder_mandated": False,
                "ripe_mandated": False
            },
            # and so on for all attributes...
        ]
    },
    {
        "event": "Shipping",
        "stage": "Transportation",
        "attributes": [
            {
                "attribute_name": "Batch/Lot or Serial Number",
                "founder_mandated": True,
                "ripe_mandated": True
            },
            {
                "attribute_name": "Data Owner",
                "founder_mandated": True,
                "ripe_mandated": True
            },
            # and so on for all attributes...
        ]
    },
    {
        "event": "Receiving",
        "stage": "Transportation",
        "attributes": [
            {
                "attribute_name": "Data Owner",
                "founder_mandated": True,
                "ripe_mandated": True
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": True,
                "ripe_mandated": True
            },
            # and so on for all attributes...
        ]
    }
]
[
    {
        "event": "Preharvest",
        "stage": "Preharvest",
        "attribute": [
            {
                "attribute_name": "% Organic Matter - soil",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Cultivar",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Electrical conductivity",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Electrical conductivity",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm Acreage/tomato acreage",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm Acreage/tomato acreage",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm Acreage/tomato acreage",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm Acreage/tomato acreage",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            }
        ]
        
    },
    {
        "event": "Shipping",
        "stage": "Transportation",
        "attribute": [
            {
                "attribute_name": "Activity Number",
                "founder_mandated": false,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Batch/Lot or Serial Number",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Data Owner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Data Owner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Trading Partner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Trading Partner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Trading Partner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Trading Partner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            }
        ],
        
    },
    {
        "event": "Receiving",
        "stage": "Transportation",
        "attribute": [
            {
                "attribute_name": "Data Owner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Identifier(s)",
                "founder_mandated": false,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Identifier(s)",
                "founder_mandated": false,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Quantity",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Quantity",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Quantity",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Quantity",
                "founder_mandated": true,
                "ripe_mandated": true
            }
        ]
        
    }
]
为此,我编写了以下代码:

first_time = True
new_events_list = []
for data in events_list:
    new_event_dict = dict()
    attr_dict = dict()
    attr_list = []
    found = False
    if first_time:
        new_event_dict['stage'] = data['stage']
        new_event_dict['event'] = data['event']
        attr_dict['attribute_name'] = data['attribute']
        attr_dict['founder_mandated'] = data['founder_mandated']
        attr_dict['ripe_mandated'] = data['ripe_mandated']
        attr_list.append(attr_dict)
        new_event_dict['attribute'] = attr_list
        new_events_list.append(new_event_dict)
        first_time = False
    else:
        for data2 in new_events_list:
            if data['stage'] == data2['stage'] and data['event'] == data2['event']:
                found = True
                for data3 in data2['attribute']:
                    if data3['attribute_name'] != data['attribute']:
                        attr_dict['attribute_name'] = data['attribute']
                        attr_dict['founder_mandated'] = data['founder_mandated']
                        attr_dict['ripe_mandated'] = data['ripe_mandated']
                        data2['attribute'].append(attr_dict)
        if not found:
            new_event_dict['stage'] = data['stage']
            new_event_dict['event'] = data['event']
            attr_dict['attribute_name'] = data['attribute']
            attr_dict['founder_mandated'] = data['founder_mandated']
            attr_dict['ripe_mandated'] = data['ripe_mandated']
            attr_list.append(attr_dict)
            new_event_dict['attribute'] = attr_list
            new_events_list.append(new_event_dict)
因此,
new\u events\u list
的输出如下所示:

[
    {
        "event": "Preharvest",
        "stage": "Preharvest",
        "attributes": [
            {
                "attribute_name": "% Organic Matter - soil",
                "founder_mandated": True,
                "ripe_mandated": False
            },
            {
                "attribute_name": "Cultivar",
                "founder_mandated": False,
                "ripe_mandated": False
            },
            # and so on for all attributes...
        ]
    },
    {
        "event": "Shipping",
        "stage": "Transportation",
        "attributes": [
            {
                "attribute_name": "Batch/Lot or Serial Number",
                "founder_mandated": True,
                "ripe_mandated": True
            },
            {
                "attribute_name": "Data Owner",
                "founder_mandated": True,
                "ripe_mandated": True
            },
            # and so on for all attributes...
        ]
    },
    {
        "event": "Receiving",
        "stage": "Transportation",
        "attributes": [
            {
                "attribute_name": "Data Owner",
                "founder_mandated": True,
                "ripe_mandated": True
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": True,
                "ripe_mandated": True
            },
            # and so on for all attributes...
        ]
    }
]
[
    {
        "event": "Preharvest",
        "stage": "Preharvest",
        "attribute": [
            {
                "attribute_name": "% Organic Matter - soil",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Cultivar",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Electrical conductivity",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Electrical conductivity",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm Acreage/tomato acreage",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm Acreage/tomato acreage",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm Acreage/tomato acreage",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm Acreage/tomato acreage",
                "founder_mandated": false,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Farm GPS coordinates",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Soil Amendment 1 date",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            },
            {
                "attribute_name": "Air Temperature",
                "founder_mandated": true,
                "ripe_mandated": false
            }
        ]
        
    },
    {
        "event": "Shipping",
        "stage": "Transportation",
        "attribute": [
            {
                "attribute_name": "Activity Number",
                "founder_mandated": false,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Batch/Lot or Serial Number",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Data Owner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Data Owner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Trading Partner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Trading Partner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Trading Partner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Trading Partner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            }
        ],
        
    },
    {
        "event": "Receiving",
        "stage": "Transportation",
        "attribute": [
            {
                "attribute_name": "Data Owner",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Date",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Identifier(s)",
                "founder_mandated": false,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Product Identifier(s)",
                "founder_mandated": false,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Quantity",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Quantity",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Quantity",
                "founder_mandated": true,
                "ripe_mandated": true
            },
            {
                "attribute_name": "Quantity",
                "founder_mandated": true,
                "ripe_mandated": true
            }
        ]
        
    }
]
但问题是输出中有很多我们不想要的重复属性。我已经尝试了很多,但无法找到正确格式化上述数据的方法。谁能帮忙吗。谢谢

我相信你需要

res = {}
for i in events_list:
    key = f"{i['event']}_{i['stage']}"
    att = {'attribute_name': i.pop('attribute'), 'founder_mandated': i.pop('founder_mandated'), 'ripe_mandated': i.pop('ripe_mandated')}
    if key not in res:
        res[key] = {'attributes': [att], **i}
    else:
        res[key]['attributes'].append(att)
        
print(list(res.values()))
输出:

[{'attributes': [{'attribute_name': '% Organic Matter - soil',
                  'founder_mandated': True,
                  'ripe_mandated': False},
                 {'attribute_name': 'Cultivar',
                  'founder_mandated': False,
                  'ripe_mandated': False},
                 {'attribute_name': 'Electrical conductivity',
                  'founder_mandated': False,
                  'ripe_mandated': False},
                 {'attribute_name': 'Farm Acreage/tomato acreage',
                  'founder_mandated': False,
                  'ripe_mandated': False},
                 {'attribute_name': 'Farm GPS coordinates',
                  'founder_mandated': True,
                  'ripe_mandated': False},
                 {'attribute_name': 'Soil Amendment 1 date',
                  'founder_mandated': True,
                  'ripe_mandated': False},
                 {'attribute_name': 'Air Temperature',
                  'founder_mandated': True,
                  'ripe_mandated': False}],
  'event': 'Preharvest',
  'stage': 'Preharvest'},
 {'attributes': [{'attribute_name': 'Activity Number',
                  'founder_mandated': False,
                  'ripe_mandated': True},
                 {'attribute_name': 'Batch/Lot or Serial Number',
                  'founder_mandated': True,
                  'ripe_mandated': True},
                 {'attribute_name': 'Data Owner',
                  'founder_mandated': True,
                  'ripe_mandated': True},
                 {'attribute_name': 'Trading Partner',
                  'founder_mandated': True,
                  'ripe_mandated': True},
                 {'attribute_name': 'Product Date',
                  'founder_mandated': True,
                  'ripe_mandated': True}],
  'event': 'Shipping',
  'stage': 'Transportation'},
 {'attributes': [{'attribute_name': 'Data Owner',
                  'founder_mandated': True,
                  'ripe_mandated': True},
                 {'attribute_name': 'Product Date',
                  'founder_mandated': True,
                  'ripe_mandated': True},
                 {'attribute_name': 'Product Identifier(s)',
                  'founder_mandated': False,
                  'ripe_mandated': True},
                 {'attribute_name': 'Quantity',
                  'founder_mandated': True,
                  'ripe_mandated': True}],
  'event': 'Receiving',
  'stage': 'Transportation'}]
您还可以为此使用:

In [454]: import pandas as pd

In [449]: df = pd.DataFrame(events_list)

In [453]: output = [{"event":x, "stage": y, "attribute":z.to_dict('records')} for (x,y),z in df.set_index(['event', 'stage']).groupby(['event', 'stage'])]

In [454]: output
Out[454]: 
[{'event': 'Preharvest',
  'stage': 'Preharvest',
  'attribute': [{'attribute': '% Organic Matter - soil',
    'founder_mandated': True,
    'ripe_mandated': False},
   {'attribute': 'Cultivar',
    'founder_mandated': False,
    'ripe_mandated': False},
   {'attribute': 'Electrical conductivity',
    'founder_mandated': False,
    'ripe_mandated': False},
   {'attribute': 'Farm Acreage/tomato acreage',
    'founder_mandated': False,
    'ripe_mandated': False},
   {'attribute': 'Farm GPS coordinates',
    'founder_mandated': True,
    'ripe_mandated': False},
   {'attribute': 'Soil Amendment 1 date',
    'founder_mandated': True,
    'ripe_mandated': False},
   {'attribute': 'Air Temperature',
    'founder_mandated': True,
    'ripe_mandated': False}]},
 {'event': 'Receiving',
  'stage': 'Transportation',
  'attribute': [{'attribute': 'Data Owner',
    'founder_mandated': True,
    'ripe_mandated': True},
   {'attribute': 'Product Date',
    'founder_mandated': True,
    'ripe_mandated': True},
   {'attribute': 'Product Identifier(s)',
    'founder_mandated': False,
    'ripe_mandated': True},
   {'attribute': 'Quantity',
    'founder_mandated': True,
    'ripe_mandated': True}]},
 {'event': 'Shipping',
  'stage': 'Transportation',
  'attribute': [{'attribute': 'Activity Number',
    'founder_mandated': False,
    'ripe_mandated': True},
   {'attribute': 'Batch/Lot or Serial Number',
    'founder_mandated': True,
    'ripe_mandated': True},
   {'attribute': 'Data Owner',
    'founder_mandated': True,
    'ripe_mandated': True},
   {'attribute': 'Trading Partner',
    'founder_mandated': True,
    'ripe_mandated': True},
   {'attribute': 'Product Date',
    'founder_mandated': True,
    'ripe_mandated': True}]}]