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)
我尝试 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)