Home > OS >  Python Dict append value if key value pair are same
Python Dict append value if key value pair are same

Time:05-13

I am new to python dict, and have question regarding append value to key. Sample python dictionary is like below. How can I append values if key-value pair, ID & time are same? Please see expected result below. Tried append(), pop(), update(), and couldn't get expected result. Appreciate any help.


    {
        "Total": [
            {
                "ID": "ID_1000",
                "time": 1000,
                "name": {
                    "first_name": "John",
                    "last_name": "Brown"
                }
            },
            {
                "ID": "ID_5000",
                "time": 5000,
                "name": {
                    "first_name": "Jason",
                    "last_name": "Willams"
                }
            },
            {
                "ID": "ID_5000",
                "time": 5000,
                "name": {
                    "first_name": "Mary",
                    "last_name": "Jones"
                }
            },
            {
                "ID": "ID_1000",
                "time": 1000,
                "name": {
                    "first_name": "Michael",
                    "last_name": "Kol"
                }
            }
        ]
    }

Below is the expected result.


    {
        "Total": [
            {
                "ID": "ID_1000",
                "time": 1000,
                "name": [
                    {
                        "first_name": "John",
                        "last_name": "Brown"
                    },
                    {
                        "first_name": "Michael",
                        "last_name": "Kol"
                    }
                ]
            },
            {
                "ID": "ID_5000",
                "time": 5000,
                "name": [
                    {
                        "first_name": "Jason",
                        "last_name": "Willams"
                    },
                    {
                        "first_name": "Mary",
                        "last_name": "Jones"
                    }
                ]
            }
        ]
    }

CodePudding user response:

One option is use a intermediate dictionary with your ids as keys. Note that this code do not manage the time data, because is not clear if you want to add or what is expected.

import json

values = {
        "Total": [
            {
                "ID": "ID_1000",
                "time": 1000,
                "name": {
                    "first_name": "John",
                    "last_name": "Brown"
                }
            },
            {
                "ID": "ID_5000",
                "time": 5000,
                "name": {
                    "first_name": "Jason",
                    "last_name": "Willams"
                }
            },
            {
                "ID": "ID_5000",
                "time": 5000,
                "name": {
                    "first_name": "Mary",
                    "last_name": "Jones"
                }
            },
            {
                "ID": "ID_1000",
                "time": 1000,
                "name": {
                    "first_name": "Michael",
                    "last_name": "Kol"
                }
            }
        ]
    }

# first create a dictionary with the ids as keys
consolidated_names = {}
for total_value in values["Total"]:
    id = total_value["ID"]
    if id not in consolidated_names:
        consolidated_names[id] = [total_value["name"]]
    else:
        consolidated_names[id].append(total_value["name"])

# then create the structure that you want
processed_values = []
for id in consolidated_names:
    processed_values.append({"ID": id, "name": consolidated_names[id]})


print(json.dumps({"Total": processed_values}, indent=4))

Result:

{
    "Total": [
        {
            "ID": "ID_1000",
            "name": [
                {
                    "first_name": "John",
                    "last_name": "Brown"
                },
                {
                    "first_name": "Michael",
                    "last_name": "Kol"
                }
            ]
        },
        {
            "ID": "ID_5000",
            "name": [
                {
                    "first_name": "Jason",
                    "last_name": "Willams"
                },
                {
                    "first_name": "Mary",
                    "last_name": "Jones"
                }
            ]
        }
    ]
}
  • Related