猿问

通过python中的键对多维数组进行分组

我有这个代码:


 [

    {

        "info": {

            "a": 65535,

            "b": 50,

        },

        "test": {

            "m": "10300",

            "id": "2008",

        },

    },

    {

        "info": {

            "a": 65535,

            "b": 50,

        },

        "test": {

            "m": "10300",

            "id": "2008",

        },

    },

    {

        "info": {

            "a": 65535,

            "b": 50,

        },

        "test": {

            "m": "10300",

            "id": "2009",

        },

    },

]

我希望有 :


[

    "2008" : [

        {

            "info": {

                "a": 65535,

                "b": 50,

             },

            "test": {

                "m": "10300",

                "id": "2008",

             },

        },

        {

            "info": {

                "a": 65535,

                "b": 50,

            },

            "test": {

                "m": "10300",

                "id": "2008",

            },

       },

    ]

    "2009" : [

        {

            "info": {

                "a": 65535,

                "b": 50,

            },

            "test": {

                "m": "10300",

                "id": "2009",

            },

        },

     ]

想法是基于列ID按键值分组。我是python的新手,不知道该怎么做。请帮我。提前谢谢。如果您能提供一些想法,那就太好了。我找到了一些示例,但无论如何还是不能解决这个问题。


我的解决方案:


value = [i for i in array]

res = sorted(value, key=lambda x: x["id"], reverse=True)


一只甜甜圈
浏览 208回答 3
3回答

米脂

我认为您想要一个dictionary每个键都为id且值是您的对象的地方。尝试以下方法。data是您的数据数组。new = {}for item in data:    item_id = item['test']['id']    new[item_id] = item您还可以使用字典理解。new = {item['test']['id']: item for item in data}

慕森王

用 itertools.groupbyfrom itertools import groupbyf = lambda d: d['test']['id']res = {k:list(v) for k,v in groupby(sorted(l, key=f), f)}pprint(res)输出{'2008': [{'info': {'a': 65535, 'b': 50},           'test': {'id': '2008', 'm': '10300'}},          {'info': {'a': 65535, 'b': 50},           'test': {'id': '2008', 'm': '10300'}}], '2009': [{'info': {'a': 65535, 'b': 50},           'test': {'id': '2009', 'm': '10300'}}]}

波斯汪

让我们假设array = [   {    "info": {        "a": 65535,        "b": 50,        },    "test": {        "m": "10300",        "id": "2008",        },    },    {    "info": {        "a": 65535,        "b": 50,        },    "test": {        "m": "10300",        "id": "2008",        },    },    {    "info": {        "a": 65535,        "b": 50,        },    "test": {        "m": "10300",        "id": "2009",        },    },]然后您可以通过使用获得预期的结果modified_data = {}for entry in array:    index = entry['test']['id']    try:        modified_data[index].append(entry)    except KeyError:        modified_data[index] = [entry]print modified_data现在让我们分析您的代码value = [i for i in array]此后的值将等于数组本身,假设您的数组初始化与我的相同。res = sorted(value, key=lambda x: x["id"], reverse=True)如果上面的语句正确,则value将没有“ id”,因此将引发错误。此外,列表不能具有键值对。您必须为此使用字典。
随时随地看视频慕课网APP

相关分类

Python
我要回答