我嘗試回傳一個包含 3 個不同值的字典。(每個分支機構和每個客戶型別的銷售總數)
我需要像回傳字典一樣
{"A": {"Member": 230, "Normal": 351},
"B": {"Member": 123, "Normal": 117},
"C": {"Member": 335, "Normal": 18}}
我做錯了什么,有人可以解釋一下嗎?
import csv
dict_from_csv = {}
file = open('supermarket_sales.csv')
csv_reader = csv.reader(file)
next(csv_reader)
for row in csv_reader:
branch= row[1]
Customer = row[3]
total = float(row[9])
curent_total= dict_from_csv.get(branch)
if dict_from_csv.get(branch) is None:
dict_from_csv[branch]={}
else:
if dict_from_csv[branch].get(Customer) is None:
dict_from_csv[branch]={Customer: 0}
else :
curent_total= dict_from_csv.get(branch)
print(dict_from_csv)
我只能回傳:
{'A': {'Member': 0},
'C': {'Normal': 0},
'B': {'Normal': 0}}
scv 檔案:https ://app.box.com/s/f4hcfkferizntbev3ou8hso6nyfccf74
uj5u.com熱心網友回復:
第一個錯誤:
dict_from_csv[branch]={Customer: 0}
它用新的字典創建新的字典,Customer但它也洗掉了帶有預測客戶的以前的字典。
它應該是
dict_from_csv[branch][Customer] = 0
并將新客戶添加到現有字典中。
第二個錯誤:你不必 = 1計算元素
dict_from_csv[branch][customer] = 1
完整的作業代碼:
import csv
f = open('supermarket_sales.csv')
csv_reader = csv.reader(f)
next(csv_reader)
dict_from_csv = {}
for row in csv_reader:
branch= row[1]
customer = row[3]
if branch not in dict_from_csv:
dict_from_csv[branch] = {}
if customer not in dict_from_csv[branch]:
dict_from_csv[branch][customer] = 0
dict_from_csv[branch][customer] = 1
print(dict_from_csv)
結果:
{
'A': {'Member': 167, 'Normal': 173},
'C': {'Normal': 159, 'Member': 169},
'B': {'Member': 165, 'Normal': 167}
}
順便說一句:如果你會使用pandas.DataFrame然后使用
import pandas as pd
df = pd.read_csv('/home/furas/supermarket_sales.csv')
sizes = df.groupby(['Branch','Customer type']).size()
print(sizes)
你會得到
Branch Customer type
A Member 167
Normal 173
B Member 165
Normal 167
C Member 169
Normal 159
dtype: int64
更大的問題是將其轉換為預期的字典。
有.to_dict()但.to_json()他們沒有創建預期的字典。
But this works for me:
result = dict()
for ((brand, customer), number) in sizes.items():
if brand not in result:
result[brand] = dict()
result[brand][customer] = number
print(result)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/443912.html
