簡體   English   中英

從 zip() 創建的字典只包含兩條​​記錄而不是 1000+

[英]Dictionary created from zip() only contains two records instead of 1000+

我目前正在通過 Code Academy 進行美國醫療保險成本組合項目,並且無法將兩個列表合並到一個字典中。 我創建了兩個新列表( smoking_statusinsurance_costs成本),希望調查吸煙者和非吸煙者之間的保險費用有何不同。 但是,當我嘗試將這兩個列表壓縮在一起時,新字典只有兩個組件。 它應該有一千多。 我哪里做錯了? 下面是我的代碼和輸出。 看到的輸出是我原始 csv 文件中的最后兩個數據點,這毫無價值。

import csv

insurance_db = 

with open('insurance.csv',newline='') as insurance_csv:
    insurance_reader = csv.DictReader(insurance_csv)
    for row in insurance_reader:
        insurance_db.append(row)

smoking_status = []

for person in insurance_db:
    smoking_status.append(person.get('smoker'))

insurance_costs = []

for person in insurance_db:
    insurance_costs.append(person.get('charges'))

smoker_dictionary = {key:value for key,value in zip(smoking_status,insurance_costs)}

print(smoker_dictionary)

輸出:

{'yes': '29141.3603', 'no': '2007.945'}

一個鍵不能在字典中出現兩次。 如果我理解正確,有兩種狀態,“是”和“否”。 如果是這樣,那么“正確”的字典結構將是:

{'yes':[...], 'no': [...]}

您可以創建一個空字典:

{status: [] for status in set(smoking_status)}

然后在您的壓縮列表上運行並附加到正確的密鑰。

無論如何,您為什么要在基本上輸入上循環三遍?

entries = []

with open('insurance.csv',newline='') as insurance_csv:
    for row in csv.DictReader(insurance_csv):
        entries.append([row["smoker"], row["charges"]])

我們無法猜測您的預期輸出應該是什么; 壓縮兩個列表應該創建一個列表,每個列表中的行連接起來,這就是這段代碼的作用。 如果您想要一個字典或字典列表,您可能希望以不同方式組合來自每個輸入行的數據,但否則代碼應該或多或少這樣。

如果您的輸入是

id,smoker,charges
1,no,123
2,no,567
3,yes,987

那么輸出將是

[["no", 123],
 ["no", 567],
 ["yes", 987]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM