[英]creating dictionary within a dictionary in python reading some data is a csv file
[英]reading csv file in Python and creating dictionary
我有一個像這樣的csv數據集:
A, 10, USA
B,30, UK
C,4,IT
A,20,UK
B,10,USA
我想閱讀這些csv行並提供以下輸出:
A has ran 30 miles with average of 15.
B has ran 30 miles with average of 20.
C has ran 4 miles with average of 4.
到目前為止,我的解決方案是讀取csv數據並將它們轉換為字典然后迭代它們以查看“A”重復了多少次以及它必須為平均值計算的值以及最終生成結果。 我已經編寫了這段代碼,但是我很難有效地計算A重復的次數並將里程相加以創建我的最終輸出。 有什么想在Python中做到這一點? 我在C#中很容易做到這一點,但我對Python不太好。
def main(filename):
f = open(filename,'r')
labels = ['name','miles','country']
data = csv.DictReader(f,labels,delimiter=',')
for line in data:
print (line['name']+" " + "has ran" +" "+ line['miles']+" "+"miles")
f.close()
您可以使用defaultdict
存儲值,然后將其打印出來:
import csv
from collections import defaultdict
with open(filename, 'r') as handle:
reader = csv.DictReader(handle, ['name', 'miles', 'country'])
data = defaultdict(list)
for line in reader:
data[line['name']).append(int(line['miles']))
for runner, distances in data.items():
print '{} ran a total of {} miles and an average of {} miles'.format(
runner, sum(distances), sum(distances) / float(len(distances))
)
我的循環使用拆分如下:
var1,var2,var3 = line.split(“,”)
這將獲得每個變量中行中的每個值。 然后根據需要使用變量。
您可以執行以下操作:
使用load_csv函數加載它: https : //github.com/kdavies4/ModelicaRes/blob/master/modelicares/util.py#L676 ,在那里下載util.py文件並執行以下操作:
from util import load_csv d = load_csv("log.csv")
你應該得到以下字典:
d = {'Runner': ['A', 'B', 'C', 'A', 'B'], 'Distance': [10, 30, 4, 20, 10], 'Country': ['USA', 'UK', 'IT', 'UK', 'USA']}
load_csv函數使用csv.reader自動創建一個字典,其中的鍵以在標題行中找到的條目命名。 每個鍵的字典條目是相應列的值列表。 文檔在這里: http : //kdavies4.github.io/ModelicaRes/util.html#modelicares.util.load_csv 。 util.py文件包含許多其他函數,但您可以安全地刪除它們(只要您將import numpy as np
保留在頂部)。
運行以下代碼以計算平均距離:
# Create counter dictionaries for the statistics. from collections import Counter n_runs = Counter() totals = Counter() # Calculate the total distance. for runner, distance in zip(d['Runner'], d['Distance']): n_runs[runner] += 1 totals[runner] += distance # Print the results. for runner in set(d['Runner']): print("%s has run %i miles with an average of %g." % (runner, totals[runner], totals[runner]/float(n_runs[runner])))
這應該為您提供所需的結果,並且如果數據被擴展(按行或列),它應該是靈活的。
凱文
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.