Python列表转字典异常:相同面积对应价格列表生成错误及修正
问题分析与解决
代码问题根源
你用dict.fromkeys(area, [])创建字典时,所有键指向的是同一个空列表对象。因为列表是可变类型,当你给任意一个键对应的列表追加元素时,本质都是在修改同一个底层列表,最终所有键的值都会变成这个被多次追加后的列表,这就是所有值完全相同的原因。
修复方案
方案1:初始化时为每个键创建独立列表
放弃fromkeys,通过集合获取唯一面积,为每个键单独初始化空列表:
area = [1500, 500, 1500, 2000, 2500, 2000] price = [30000, 10000, 20000, 40000, 50000, 45000] priceDict = {a: [] for a in set(area)} for idx in range(len(area)): current_area = area[idx] current_price = price[idx] priceDict[current_area].append(current_price) print(priceDict)
方案2:用collections.defaultdict简化操作
defaultdict会自动为不存在的键创建空列表,省去手动初始化的步骤:
from collections import defaultdict area = [1500, 500, 1500, 2000, 2500, 2000] price = [30000, 10000, 20000, 40000, 50000, 45000] priceDict = defaultdict(list) for a, p in zip(area, price): priceDict[a].append(p) # 如需转为普通字典(可选) priceDict = dict(priceDict) print(priceDict)
方案3:遍历过程中动态创建列表
无需提前初始化字典,遇到新面积时创建列表,已存在则直接追加:
area = [1500, 500, 1500, 2000, 2500, 2000] price = [30000, 10000, 20000, 40000, 50000, 45000] priceDict = {} for a, p in zip(area, price): if a not in priceDict: priceDict[a] = [] priceDict[a].append(p) print(priceDict)
以上三种方法都能得到预期结果:
{1500: [30000, 20000], 500: [10000], 2000: [40000, 45000], 2500: [50000]}
内容的提问来源于stack exchange,提问作者YuanLinTech
相关产品推荐
相关产品推荐

