2017-04-09 79 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'}]