You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用两个列表创建键对应多个值的字典?

问题与解决方法

需求说明

现有两个列表,需要将List1的元素作为字典的键,List2中对应位置的元素作为值,相同键的元素合并为列表。

原始列表(注:Python中字符串元素需加引号,以下为修正后的可运行版本):

List2 = ["Orange", "Onions", "Cherries", "Steak", "Chicken", "Apples", "Rice", "Grapes"]
List1 = ["Fruits", "Vegetable", "Fruits", "Meats", "Meats", "Fruits", "Grains"] 

期望输出字典:

result_dict = {
    "Fruits": ["Orange", "Cherries", "Apples", "Grapes"],
    "Vegetable": ["Onions"],
    "Meats": ["Steak", "Chicken"],
    "Grains": ["Rice"]
}

原代码问题分析

你尝试的代码存在以下问题:

  1. 变量名大小写不匹配:循环中用了list1,但定义的是List1
  2. if e == set(e)逻辑错误:这行代码判断字符串是否等于自身转成的集合,无实际分组意义
  3. 嵌套循环遍历整个List2会覆盖元素,且每次循环重新创建字典d,最终仅保留最后一次循环结果

原代码:

List2 = [Orange, Onions, Cherries, Steak, Chicken, Apples, Rice, Grapes]
List1 = [Fruits, Vegetable, Fruits, Meats, Meats, Fruits, Grains] 

for e, f in zip (list1, list2):
     if e == set(e):
          for f in list2:
               d = {e:f}

正确实现方法

方法1:普通字典循环

List2 = ["Orange", "Onions", "Cherries", "Steak", "Chicken", "Apples", "Rice", "Grapes"]
List1 = ["Fruits", "Vegetable", "Fruits", "Meats", "Meats", "Fruits", "Grains"] 

result_dict = {}
for key, value in zip(List1, List2):
    if key in result_dict:
        result_dict[key].append(value)
    else:
        result_dict[key] = [value]

print(result_dict)

方法2:使用collections.defaultdict(更简洁)

from collections import defaultdict

List2 = ["Orange", "Onions", "Cherries", "Steak", "Chicken", "Apples", "Rice", "Grapes"]
List1 = ["Fruits", "Vegetable", "Fruits", "Meats", "Meats", "Fruits", "Grains"] 

result_dict = defaultdict(list)
for key, value in zip(List1, List2):
    result_dict[key].append(value)

# 转为普通字典(可选操作)
result_dict = dict(result_dict)
print(result_dict)

两种方法执行后均可得到符合需求的分组字典。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:40:28