我是python的新手,我现在可以真正使用你的帮助和指导。我正在尝试读取带有三个列的csv文件,并根据第一列和第二列进行一些计算,即
A spent 100 A spent 2040
A earned 60
B earned 48
B earned 180
A spent 40
.
.
.
如果花费2040年将是所有“A”和“花费”金额的增加。这不会给我一个错误,但它在逻辑上不正确:
for row in rows:
cols = row.split(",")
truck = cols[0]
if (truck != 'A' and truck != 'B'):
continue
record = cols[1]
if(record != "earned" and record != "spent"):
continue
amount = int(cols[2])
#print(truck+" "+record+" "+str(amount))
if truck in entries:
#entriesA[truck].update(record)
if record in records:
records[record].append(amount)
else:
records[record] = [amount]
else:
entries[truck] = records
if record in records:
records[record].append(amount)
else:
entries[truck][record] = [amount]
print(entries)
我知道这部分是不正确的,因为我会将相同的内部字典列表添加到外部字典中,但我不确定如何从那里开始:
entries[truck] = records
if record in records:
records[record].append(amount)
但是,我不确定动态创建新词典的语法是不是'记录'
我得到了:
{'B': {'earned': [60, 48], 'spent': [100]}, 'A': {'earned': [60, 48], 'spent': [100]}}
但希望得到:
{'B': {'earned': [48]}, 'A': {'earned': [60], 'spent': [100]}}
感谢。
答案 0 :(得分:2)
对于您在此处进行的计算,我强烈推荐Pandas。
假设in.csv
看起来像这样:
truck,type,amount
A,spent,100
A,earned,60
B,earned,48
B,earned,180
A,spent,40
您可以使用三行代码进行总计:
import pandas
df = pandas.read_csv('in.csv')
totals = df.groupby(['truck', 'type']).sum()
totals
现在看起来像这样:
amount
truck type
A earned 60
spent 140
B earned 228
你会发现Pandas允许你在更高的层次上思考,并避免在这种情况下摆弄较低级别的数据结构。
答案 1 :(得分:0)
if record in entries[truck]:
entries[truck][record].append(amount)
else:
entries[truck][record] = [amount]
我相信这就是你想要的?现在我们直接访问卡车的记录,而不是尝试检查名为records
的本地字典。就像你没有卡车的任何进入一样。