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

技术问询:如何将指定元组列表转换为单键对应多字典值的字典

解决元组列表转特定结构字典的问题

嘿,我来帮你搞定这个转换问题!你当前的代码存在一个关键问题:每次循环都会把dict[result[2]]重新赋值为一个新字典,这会直接覆盖掉之前存储的数据,而我们需要的是同一个ID对应一个列表,里面包含多个公司信息的字典。

下面是两种可行的解决方案:

方案1:手动判断ID是否存在(基础版)

首先要注意:不要用list和dict作为变量名,它们是Python的内置类型,用这些名字会覆盖内置函数/类型,容易引发潜在bug。我们换成更清晰的变量名:

# 原始元组列表
tuples_list = [('WALMART', '601 12th Avenue Northeast',916523), ('WALMART SHARED', '1953 west brown street',916523)]
# 初始化结果字典
result_dict = {}

# 遍历每个元组,解包出公司名、地址、ID
for cmp_name, cmp_address, cmp_id in tuples_list:
    # 检查当前ID是否已在字典中,不存在则初始化空列表
    if cmp_id not in result_dict:
        result_dict[cmp_id] = []
    # 创建公司信息字典并添加到对应ID的列表中
    result_dict[cmp_id].append({
        'cancmpname': cmp_name,
        'canaddress': cmp_address
    })

print(result_dict)

运行这段代码后,你会得到完全符合需求的字典结构:

{
 916523: [
     {'cancmpname': 'WALMART', 'canaddress': '601 12th Avenue Northeast'},
     {'cancmpname': 'WALMART SHARED', 'canaddress': '1953 west brown street'}
 ]
}

方案2:使用collections.defaultdict(简洁版)

如果你想让代码更简洁,可以用Python标准库的defaultdict,它会自动为不存在的键创建指定类型的默认值(这里是列表):

from collections import defaultdict

tuples_list = [('WALMART', '601 12th Avenue Northeast',916523), ('WALMART SHARED', '1953 west brown street',916523)]
# 初始化defaultdict,默认值为空列表
result_dict = defaultdict(list)

for cmp_name, cmp_address, cmp_id in tuples_list:
    # 直接append,无需判断ID是否存在
    result_dict[cmp_id].append({
        'cancmpname': cmp_name,
        'canaddress': cmp_address
    })

# (可选)如果需要转换成普通字典而非defaultdict类型
result_dict = dict(result_dict)

这个方案省去了手动判断键是否存在的步骤,代码更简洁,适合处理这类分组场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:22:28