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

Python遍历两个列表生成键唯一且值可含多个项的字典实现方法

实现方案

核心处理分两个阶段完成,逻辑简单不容易出错:

  • 第一阶段聚合:同步遍历两个位置对应的列表,把相同车牌关联的所有分组统一归集到列表中,避免漏记多分组归属
  • 第二阶段格式适配:聚合完成后检查每个车牌对应的分组数量,仅归属1个分组的直接存储单字符串值,归属多个分组的保留列表结构

基础实现(无额外依赖)

不需要导入任何模块,纯基础语法即可实现,兼容性最好:

L1 = ['173', '607', '607', '581', '522', '522']
L2 = ['fleet 6', 'fleet 4', 'fleet 6', 'Toyota', 'Maintenance', 'fleet 1']

# 聚合所有车牌对应的分组
temp = {}
for plate, group in zip(L1, L2):
    if plate not in temp:
        temp[plate] = []
    temp[plate].append(group)

# 按要求适配单值/列表格式
result = {}
for plate, groups in temp.items():
    result[plate] = groups[0] if len(groups) == 1 else groups

运行后得到的result完全匹配预期输出:

{
    '173': 'fleet 6',
    '607': ['fleet 4', 'fleet 6'],
    '581': 'Toyota',
    '522': ['Maintenance', 'fleet 1']
}

简洁写法(借助标准库)

如果可以使用Python标准库,用collections.defaultdict可以省略key存在性判断的代码,写法更简洁:

from collections import defaultdict

L1 = ['173', '607', '607', '581', '522', '522']
L2 = ['fleet 6', 'fleet 4', 'fleet 6', 'Toyota', 'Maintenance', 'fleet 1']

temp = defaultdict(list)
for plate, group in zip(L1, L2):
    temp[plate].append(group)

result = {k: v[0] if len(v) == 1 else v for k, v in temp.items()}

注意事项

  • 用zip(L1, L2)配对元素的前提是两个列表长度一致,和位置对应关系的需求完全匹配,不需要手动维护索引遍历
  • 不建议在遍历初始阶段就判断是否存单值,很容易出现后续遇到重复车牌时把之前的单值覆盖、丢失分组的问题,先全量聚合再做格式转换的逻辑容错性更高

内容的提问来源于stack exchange,提问作者Андрей Романов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:42:43