2017-04-09 47 views
0

假設類型的字典的兩個列表:更新列表

線索和客戶,其中LEN(客戶)< LEN(線索):

customers = [{'name': 'Joe', 'age': 28}, {'name': 'Adam', 'age': 34}] 

leads  = [{'name': 'Joe', 'city': 'NYC'}, {'name': 'Molly', 'city': 'LA'}, 
      {'name': 'Adam', 'city': 'Washington DC'}] 

我需要更新客戶快譯通與引線附加信息的名稱相匹配:

所需的輸出:

output = [{'name': 'Joe', 'age': 28, 'city':'NYC'}, {'name': 'Adam', 'age': 34, 'city': 'Washington DC'}] 

我試過拉鍊(),然後循環通過匹配鑰匙,但因爲它們是列表,我得到一個「列表索引必須是整數,而不是STR」錯誤

回答

1

您可以使用leads的字典列表中存儲數據的對象是name,稍後使用該名稱更新customers列表中的數據。

>>> leads_data = {} 
>>> for lead in leads: 
...  leads_data.setdefault(lead['name'], {}).update(lead) 
... 
>>> for c in customers: 
...  c.update(leads_data.get(c['name'], {})) 
... 
>>> customers 
[{'city': 'NYC', 'age': 28, 'name': 'Joe'}, 
{'city': 'Washington DC', 'age': 34, 'name': 'Adam'}] 
0

這是我對這個電話:

for d in customers: 
    lead = [x for x in leads if x['name'] == d['name']] 
    if lead: 
     d.update(lead[0]) 

print(customers) 

>>> 
[{'city': 'NYC', 'age': 28, 'name': 'Joe'}, {'city': 'Washington DC', 'age': 34, 'name': 'Adam'}]