Python 中来自网络 csv 文件的字典

Dictionary from web scv file in Python

我尝试 return 一个包含 3 个不同值的字典。 (每个分支机构和每个客户类型的销售总数)

我需要return字典喜欢

{"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)

我只能return:

{'A': {'Member': 0}, 
'C': {'Normal': 0}, 
'B': {'Normal': 0}}

scv 文件:https://app.box.com/s/f4hcfkferizntbev3ou8hso6nyfccf74

第一个错误:

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() 但它们没有创建预期的字典。

但这对我有用:

result = dict()

for ((brand, customer), number) in sizes.items():
    if brand not in result:
        result[brand] = dict()
    result[brand][customer] = number

print(result)