簡體   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