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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:15:42