【问题标题】:create a new list of dictionaries based on a key in one list of dictionaries根据一个字典列表中的键创建一个新的字典列表
【发布时间】:2017-03-23 18:50:43
【问题描述】:

我对 python 编程很陌生。 我想创建一个新的基于字典键 name 的列表。如果name 等于id 值的总和。

a = [{'id': 1, 'name': 'paul'},{'id': 2, 'name': 'john'},{'id': 3, 'name': 'john'},{'id': 4, 'name': 'john'}]

新列表如下:

new_a = [{'id': 1, 'name': 'paul'},{'id': 9, 'name': 'john'}]

提前致谢!

【问题讨论】:

    标签: python python-2.7 list dictionary sum


    【解决方案1】:

    此代码也可以满足您的要求,但是,我认为不同的数据结构设置可能会做得更好。

    new_a = list()
    names_list = list()
    for el in a:
        if el['name'] not in names_list:
            new_a.append({'name':el['name'],'id':el['id']})
            names_list.append(el['name'])
        else:
            for new_el in new_a:
                if el['name'] == new_el['name']:
                    new_el['id'] += el['id']
    

    【讨论】:

      【解决方案2】:

      您可以为此使用Counter,然后进行一些转换,例如:

      from collections import Counter
      
      ctr = Counter()
      for dic in a:
          ctr[dic['name']] += dic['id']
      new_a = [{'name': name, 'id': id} for name,id in ctr.iteritems()]

      这会产生:

      >>> new_a
      [{'name': 'paul', 'id': 1}, {'name': 'john', 'id': 9}]
      

      请注意,列表的顺序未确定

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-29
        • 2022-11-15
        • 1970-01-01
        • 2014-10-22
        • 2017-11-06
        • 2020-08-31
        • 1970-01-01
        • 2018-09-18
        相关资源
        最近更新 更多