【问题标题】:Update list of dicts with keys/values from another list of dicts使用另一个字典列表中的键/值更新字典列表
【发布时间】:2017-04-09 19:17:31
【问题描述】:

假设有两个字典列表:

leads and customers where len(customers)

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

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

【问题讨论】:

    标签: python list dictionary nested


    【解决方案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'}]
    

    【讨论】:

      【解决方案2】:

      这是我的呼吁:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-31
        • 2017-11-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多