Merge same dictionary value into one list

Question:

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.

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.

Asked By: Venessa

||

Answers:

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.

Answered By: match
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.