Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Merge same dictionary value into one list

I am new in python and I am trying to list comprehsion my list dictionaries.

I have a serialized response in dictionaries inside list like :-

[
    {
        "data": {
            "id": 61,
            "title": "First"
        },
        "type": "like"
    },
    {
        "data": {
            "id": 62,
            "title": "Seven"
        },
        "type": "like"
    },
    {
        "data": {
            "id": 103,
            "title": "Third",
        },
        "type": "dislike"
    },
    {
        "data": {
            "id": 7,
            "title": "Fifth",
        },
        "type": "dislike"
    }
]

Multiple dictionaries with same type key are inside the list and I am trying to merge dictionaries into one list which have same keys.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I am trying to get like :-

[
    {
        "like": [
            {
               "id": 61,
               "title": "First"},
            {
               "id": 62,
               "title": "Second"
            }
        ],
    },
    {
        "dislike": [
            {
               "id": 103,
               "title": "Third"
            },
            {
               "id": 7,
               "title": "Fifth"
            }
        ],
    },
]

I have tried using set() and union()

def comprehsion_method(list_dict):
    converted_list = {
    k : [d.get(k) for d in list_dict if k in d]
    for k in set().union(*list_dict)
    }

    return converted_list

but This method merged all the data keys into one and all the type keys into one like :-

{
    "data": [
        {
           "id":61, 
           "title": "First"
        },
        {
           "id":62, 
           "title": "Second"
        },
        {
           "id":103, 
           "title": "Third"
        },
        {
           "id":7, 
           "title": "Seven"
        },
    ],
    "type": [
        "like",
        "like",
        "dislike",
        "dislike"
    ]
}

I have many times but it is still not working. Any help would be much Appreicated.

>Solution :

With comprehensions, especially complicated ones, it is best to start by writing out the explicit loop. In this case, you need something like:

new = {"like": [], "dislike": []}
for item in data:
  if item["type"] == "like":
    new["like"].append(item["data"])
  else:
    new["dislike"].append(item["data"])


print(new)

At this stage it is apparent that this function is trying to aggregate to a series of lists – something which comprehensions aren’t designed to do. While it might be possible to convert it into a list comprehension, it will likely be relatively complex and less readable than the above code – so in this case I would leave it as is.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading