【问题标题】:how to merge values of python dict in a list of dictionaries如何在字典列表中合并python dict的值
【发布时间】:2014-06-04 05:29:57
【问题描述】:

我有一个python字典列表,如下所示:

mylist = [{'id':1,'value':4},{'id':1,'value':6},{'id':2,'value':6},{'id':3,'value':9},{'id':3,'value':56},{'id':3,'value':67},]

我正在尝试通过对上面显示的字典列表进行一些操作来创建一个新的字典列表

newlist = [{'id':1,'value':[4,6]},{'id':2,'value':[6]},{'id':3,'value':[9,56,67]}]

有谁知道这样做的好方法吗?

【问题讨论】:

    标签: python list dictionary


    【解决方案1】:

    如果列表项按id排序,则可以使用itertools.groupby

    >>> mylist = [{'id':1,'value':4},{'id':1,'value':6},{'id':2,'value':6},{'id':3,'value':9},{'id':3,'value':56},{'id':3,'v    alue':67},]
    >>> import itertools
    >>> [{'id': key, 'value': [x['value'] for x in grp]}
    ...  for key, grp in itertools.groupby(mylist, key=lambda d: d['id'])]
    [{'id': 1, 'value': [4, 6]},
     {'id': 2, 'value': [6]},
     {'id': 3, 'value': [9, 56, 67]}]
    

    【讨论】:

    • @Suor,这就是我以If list items are sorted by id 开头的原因。
    【解决方案2】:

    您可以使用defaultdict 将整个字典列表构建为具有多个值的单个字典,就像这样

    from collections import defaultdict
    d = defaultdict(list)
    for item in mylist:
        d[item['id']].append(item['value'])
    

    然后使用列表推导,您可以像这样重构所需的字典列表

    print[{'id': key, 'value': d[key]} for key in d]
    # [{'id':1, 'value':[4, 6]}, {'id':2, 'value':[6]}, {'id':3, 'value':[9,56,67]}]
    

    【讨论】:

    • 输出是这样的 [{'id': 1, 'value': [4, 6,4,6]}, {'id': 2, 'value': [6, 6]}, {'id': 3, 'value': [9, 56, 67,9,56,67]}]
    • @vipin 不,不是。请显示您尝试过的实际代码。
    【解决方案3】:

    你也可以使用dict理解:

    newlist = {key: [entries[key] for entries in diclist] for key, value in diclist[0].items()}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-10
      • 2018-05-28
      • 1970-01-01
      • 2020-02-09
      • 2020-12-12
      • 2012-08-11
      相关资源
      最近更新 更多