You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将两个列表中的对应字典合并为新字典列表?

解决字典列表对应位置合并的问题

嘿,这个需求其实很常见,咱们可以用Python里的几个简洁技巧轻松实现目标。下面给你两种常用的方法:

方法一:列表推导式 + zip + 字典解包

这是最简洁的写法,一行代码就能搞定:

data = [{"name":"Kane", "age": 29}, {"name":"will", "age": "32"}]
data_2 = [ {"Team":"SRH", "Country" :"NZ"}, {"Team":"RCB", "Country" :"WI"}]

# 核心代码
data3 = [{**d1, **d2} for d1, d2 in zip(data, data_2)]

print(data3)
# 输出:[{"name":"Kane", "age": 29, "Team":"SRH", "Country" :"NZ"}, {"name":"will", "age": "32", "Team":"RCB", "Country" :"WI"}]

原理说明:

  • zip(data, data_2):把两个列表中对应位置的字典配对成元组,比如第一个元组是(data[0], data_2[0]),第二个是(data[1], data_2[1])
  • {**d1, **d2}:用字典解包语法,把d1d2的所有键值对合并到一个新字典里。如果两个字典有重复键,后面的d2会覆盖d1的对应值(你的例子里没有重复键,完全适配)。

方法二:循环 + dict.copy() + dict.update()

如果觉得上面的写法有点抽象,这种更直观的循环写法适合新手理解:

data = [{"name":"Kane", "age": 29}, {"name":"will", "age": "32"}]
data_2 = [ {"Team":"SRH", "Country" :"NZ"}, {"Team":"RCB", "Country" :"WI"}]

data3 = []
for d1, d2 in zip(data, data_2):
    # 先复制d1,避免修改原字典的数据
    merged_dict = d1.copy()
    # 把d2的键值对添加到复制后的字典里
    merged_dict.update(d2)
    data3.append(merged_dict)

print(data3)

原理说明:

  • d1.copy():创建原字典的副本,防止后续update操作修改原始的data列表里的字典。
  • merged_dict.update(d2):把d2的所有键值对合并到merged_dict中,效果和字典解包一致。

额外说明:处理列表长度不一致的情况

如果你的两个列表长度不一样,zip只会处理到较短列表的长度。如果想保留所有元素,可以用itertools.zip_longest,配合fillvalue填充空字典:

from itertools import zip_longest

data = [{"name":"Kane", "age": 29}, {"name":"will", "age": "32"}, {"name":"Bob", "age": 27}]
data_2 = [ {"Team":"SRH", "Country" :"NZ"}, {"Team":"RCB", "Country" :"WI"}]

data3 = [{**d1, **d2} for d1, d2 in zip_longest(data, data_2, fillvalue={})]
print(data3)
# 输出:[{"name":"Kane", "age":29, "Team":"SRH", "Country":"NZ"}, {"name":"will", "age":"32", "Team":"RCB", "Country":"WI"}, {"name":"Bob", "age":27}]

内容的提问来源于stack exchange,提问作者sankar nataraj

火山引擎 最新活动