python 将相同的字典值合并到一个列表中

niwlg2el  于 2023-01-29  发布在  Python
关注(0)|答案(1)|浏览(239)

我是python新手,我正在尝试list comprehsion我的列表字典。
我在list内部的dictionaries中有一个序列化响应,如下所示:-

[
    {
        "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"
    }
]

列表中有多个具有相同typekey的字典,我正尝试将具有相同keys的字典合并到一个列表中。
我想得到像:

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

我已经尝试使用set()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

但是这个方法将所有的data密钥合并成一个,并将所有的type密钥合并成一个,如:-

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

我已经试过很多次了,但是还是不行。如果有任何帮助,我将非常感激。

wj8zmpe1

wj8zmpe11#

对于解析,尤其是复杂的解析,最好从写出显式循环开始。在这种情况下,你需要类似这样的代码:

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

print(new)

在这个阶段,很明显这个函数试图聚合成一系列的列表--解析并没有设计成这样。虽然有可能将它转换成列表解析,但它可能相对复杂,比上面的代码可读性差--所以在这种情况下,我将保持原样。

相关问题