2017-03-23 14 views
0

私はPythonプログラミングにとってかなり新しいです。 nameという新しい辞書ベースのリストを作成したいと思います。 nameが等しい場合は、idの値を合計します。辞書の1つのリストのキーに基づいて辞書の新しいリストを作成します

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

事前に感謝します:

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

新しいリストは次のようになります!

答えて

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'] 
+0

ありがとうございます。できます – user6136315

1

あなたはそのための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}] 

注意。

関連する問題