![](/img/trans.png)
[英]Python speed optimization when downloading 1000+ zip files from URL
[英]Dictionary created from zip() only contains two records instead of 1000+
我目前正在通過 Code Academy 進行美國醫療保險成本組合項目,並且無法將兩個列表合並到一個字典中。 我創建了兩個新列表( smoking_status
和insurance_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.