2017-03-23 157 views
0

我很新的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'}] 

謝謝!

回答

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}] 

注意,順序名單未定

相關問題