技术问询:如何将指定元组列表转换为单键对应多字典值的字典
解决元组列表转特定结构字典的问题
嘿,我来帮你搞定这个转换问题!你当前的代码存在一个关键问题:每次循环都会把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
相关产品推荐
相关产品推荐

