繁体   English   中英

将两个列表的内容作为键值对存储在字典中

[英]Store contents of two lists as key-value pairs in a dictionary

我有两个 Python 列表。 一个名为area的列表存储房屋的面积。 不同的房屋可能有相同的面积。 另一个名为price的列表存储了这些房屋的相应价格。 我想创建一个名为priceDict的字典,其键是房屋的独特区域,其值是同一地区房屋价格的列表。 例如,假设area = [1500, 500, 1500, 2000, 2500, 2000]price = [30000, 10000, 20000, 40000, 50000, 45000] 我想创建字典priceDict = {1500: [30000, 20000], 500: [10000], 2000: [40000, 45000], 2500: [50000]}

我写了以下 Python 代码:

area = [1500, 500, 1500, 2000, 2500, 2000]
price = [30000, 10000, 20000, 40000, 50000, 45000]
priceDict = dict.fromkeys(area,[])
    
for houseArea in priceDict:
    for areaIndex in range(len(area)):
        if area[areaIndex] == houseArea:
            priceDict[houseArea].append(price[areaIndex])

print(priceDict)

然而,当我执行代码时,我得到的 output 是:

{1500: [30000, 20000, 10000, 40000, 45000, 50000], 500: [30000, 20000, 10000, 40000, 45000, 50000], 2000: [30000, 20000, 10000, 40000, 45000, 50000], 2500: [30000, 20000, 10000, 40000, 45000, 50000]}

我想问一下我的代码有什么问题以及如何重写我的代码以使其执行预期的 function。

你的第一个问题在这里:

priceDict = dict.fromkeys(area,[])

这使得priceDict中的每个键都共享相同的列表。

第二个问题是您正在嵌套 for 循环,而不是使用单个 for 循环和压缩来配对您的项目:

priceDict = {}
for k, v in zip(area, price):
    priceDict.setdefault(k, []).append(v)

请注意priceDict.setdefault(k, []).append(v)效率稍低,因为它会在每次迭代时创建一个空列表。 一种更有效的方法是使用listdefaultdict

from collections import defaultdict

priceDict = defaultdict(list)
for k, v in zip(area, price):
    priceDict[k].append(v)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM