使用另一个词组列表

时间:2017-04-09 19:17:32

标签: python list dictionary nested

假设两个词组列表:

领导和客户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'}]

我需要更新客户dict,其中来自潜在客户的其他信息是名称匹配:

期望的输出:

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

我尝试过zip()然后循环来匹配键,但由于它们是列表,我得到一个“列表索引必须是整数,而不是str”错误

2 个答案:

答案 0 :(得分:1)

您可以使用leads列表创建一个dict,其中数据存储在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'}]

答案 1 :(得分: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'}]