【问题标题】:Integration of dictionaries inside a python list [closed]在 python 列表中集成字典 [关闭]
【发布时间】:2021-01-05 13:00:00
【问题描述】:

我的字典列表如下:

[
   {
      "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 的初学者,可能不知道一些细节。 P.S:我想以最小的减速来处理大量数据。

【问题讨论】:

  • 名称是否唯一?如果是这样,为什么这是一个字典列表而不是一个以名称为键的字典?这将使这更容易和更快。
  • @MarkMeyer 是的,名称是唯一的。其实是api请求的响应。

标签: python json python-3.x list dictionary


【解决方案1】:

您应该首先发布您的尝试,而不是要求某人这样做。然而:

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()]

【讨论】:

  • 你说得对,我尝试了一些方法,但我没有成功,没有发布我自己的努力是由于缺乏关注。谢谢
【解决方案2】:
d = list() # Your initial list (you don't have to copy this line but just assign your initial list to d
result_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 中将结果作为键值,其中键是名称,值是与该名称对应的值的列表。我认为这个结构更容易维护,你应该在转换数据后继续处理这个结构。

【讨论】:

    【解决方案3】:

    您可以使用itertools.groupby

    from itertools import chain, groupby
    
    data = 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'}]}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-15
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 2023-03-08
      • 1970-01-01
      • 2021-03-03
      相关资源
      最近更新 更多