为了账号安全,请及时绑定邮箱和手机立即绑定

在Python列表中集成字典

在Python列表中集成字典

慕妹3146593 2023-08-15 17:00:18
我的字典列表如下:[   {      "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:我想以最小的减速度处理大量数据。
查看完整描述

3 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您可以使用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'}]}]


查看完整回答
反对 回复 2023-08-15
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

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 中获取结果作为键值,其中键是名称,值是与该名称对应的值的列表。我认为这种结构更容易维护,并且在转换数据后您应该继续处理这种结构。


查看完整回答
反对 回复 2023-08-15
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

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


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



查看完整回答
反对 回复 2023-08-15
  • 3 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信