ここにPythonの初心者がいます。おそらく明らかな何かが欠けています。どこでも検索して解決策が見つからなかったので、助けを求めたいと思いました。
大きなcsvファイルからネストされた辞書を作成する関数を作成しようとしています。入力ファイルの形式は次のとおりです。
Product,Price,Cost,Brand,
blue widget,5,4,sony,
red widget,6,5,sony,
green widget,7,5,microsoft,
purple widget,7,6,microsoft,
等...
必要な出力辞書は次のようになります。
projects = { `<Brand>`: { `<Product>`: { 'Price': `<Price>`, 'Cost': `<Cost>` },},}
しかし、明らかに、さまざまな製品を含む多くのさまざまなブランドがあります。入力ファイルでは、データはブランド名のアルファベット順に並べられていますが、DictReaderが実行されるとすぐに並べ替えられなくなることがわかっているので、重複を処理するためのより良い方法が絶対に必要です。書かれているifステートメントは冗長で不要です。
これが私がこれまでに持っている機能しない、役に立たないコードです:
def build_dict(source_file):
projects = {}
headers = ['Product', 'Price', 'Cost', 'Brand']
reader = csv.DictReader(open(source_file), fieldnames = headers, dialect = 'excel')
current_brand = 'None'
for row in reader:
if Brand != current_brand:
current_brand = Brand
projects[Brand] = {Product: {'Price': Price, 'Cost': Cost}}
return projects
source_file = 'merged.csv'
print build_dict(source_file)
もちろん、ファイルの先頭にあるcsvモジュールをインポートしました。
これを行うための最良の方法は何ですか?コースから外れているように感じますが、CSVからネストされたdictを作成するために利用できる情報はほとんどなく、そこにある例は非常に具体的であり、ソリューションが実際に機能する理由について詳しく説明しない傾向があります。 Pythonを初めて使用する人として、結論を出すのは少し難しいです。
また、入力csvファイルには通常ヘッダーがありませんが、この関数の動作バージョンを取得するために、ヘッダー行を手動で挿入しました。理想的には、ヘッダーを割り当てるコードがいくつかあります。
ヘルプ/方向性/推奨事項は大歓迎です、ありがとう!