猿问

在Python列表中集成字典

我的字典列表如下:


[

   {

      "name":"reach",

      "values":[

         {

            "value":0,

            "end_time":"2020-09-11T07:00:00+0000"

         },

         {

            "value":1,

            "end_time":"2020-09-12T07:00:00+0000"

         }

      ]

   },

   {

      "name":"impressions",

      "values":[

         {

            "value":0,

            "end_time":"2020-09-11T07:00:00+0000"

         },

         {

            "value":4,

            "end_time":"2020-09-12T07:00:00+0000"

         }

      ]

   },

   {

      "name":"reach",

      "values":[

         {

            "value":1,

            "end_time":"2020-09-13T07:00:00+0000"

         },

         {

            "value":2,

            "end_time":"2020-09-14T07:00:00+0000"

         }

      ]

   }

]

我想要集成字典的值键,它们的名称键与以下相同:


[

   {

      "name":"reach",

      "values":[

         {

            "value":0,

            "end_time":"2020-09-11T07:00:00+0000"

         },

         {

            "value":1,

            "end_time":"2020-09-12T07:00:00+0000"

         },

        {

            "value":1,

            "end_time":"2020-09-13T07:00:00+0000"

         },

         {

            "value":2,

            "end_time":"2020-09-14T07:00:00+0000"

         }

      ]

   },

   {

      "name":"impressions",

      "values":[

         {

            "value":0,

            "end_time":"2020-09-11T07:00:00+0000"

         },

         {

            "value":4,

            "end_time":"2020-09-12T07:00:00+0000"

         }

      ]

   }

]

但我现在还不知道。我怎样才能做到这一点?我是Python的初学者,可能不知道一些细节。PS:我想以最小的减速度处理大量数据。


慕妹3146593
浏览 123回答 3
3回答

素胚勾勒不出你

您可以使用itertools.groupbyfrom itertools import chain, groupbydata = sorted(d, key=lambda x: x['name'])res = [{'name': k, 'values': list(chain.from_iterable(y['values'] for y in g))} for k, g in groupby(data, key=lambda x: x['name'])]print(res)输出:[{'name': 'impressions',  'values': [{'value': 0, 'end_time': '2020-09-11T07:00:00+0000'},   {'value': 4, 'end_time': '2020-09-12T07:00:00+0000'}]}, {'name': 'reach',  'values': [{'value': 0, 'end_time': '2020-09-11T07:00:00+0000'},   {'value': 1, 'end_time': '2020-09-12T07:00:00+0000'},   {'value': 1, 'end_time': '2020-09-13T07:00:00+0000'},   {'value': 2, 'end_time': '2020-09-14T07:00:00+0000'}]}]

明月笑刀无情

d = list() # Your initial list (you don't have to copy this line but just assign your initial list to dresult_dict = dict()for e in d:    if result_dict.get(e['name']):        result_dict[e['name']].extend(e['values'])    else:        result_dict[e['name']] = e['values']使用此代码,您可以在 result_dict 中获取结果作为键值,其中键是名称,值是与该名称对应的值的列表。我认为这种结构更容易维护,并且在转换数据后您应该继续处理这种结构。

收到一只叮咚

您确实应该首先发布您的尝试,而不是要求别人这样做。然而:new_data_dict = {}for item in data:    if item['name'] not in new_data_dict:        new_data_dict[item['name']] = []    new_data_dict[item['name']] += item['values']new_data_list = [{'name': name, 'values': values} for name, value in new_data_dict.items()]
随时随地看视频慕课网APP

相关分类

Python
我要回答