2016-06-24 8 views
1

私はかなり新しいですが、この質問はかなり簡単だと思いますが、私はそれを理解できません...ループはキーごとに複数の値を持つ辞書にデータを変換します

私は私はB列の文字列を持ち、C列からI列までを値として持っています。 B列の各キー値に対して、私は列Cの値を代入する辞書を作成したいと思います。行ごとに行う方法を考えましたが、私はforループを探していますそれを行うための構文 全体のExcelデータテーブル全体。ここで

は私のコードです:

NYSE = {} 
NYSE.setdefault(sheet['B5'].value, []).append(sheet['C5'].value) 
NYSE.setdefault(sheet['B5'].value, []).append(sheet['D5'].value) 
NYSE.setdefault(sheet['B6'].value, []).append(sheet['C6'].value) 
NYSE.setdefault(sheet['B6'].value, []).append(sheet['D6'].value) 
print NYSE 

私はこの... B7 C7、B7 D7などへの追加手動で保つことができますが、機能および出力辞書でこのループへの道がなければなりません。

+0

あなたはcsvファイルに変換することができますか? – RoadRunner

+0

はい私はcsvかxlsxファイルのいずれかを使うことができました – Deuce525

答えて

1

あなたはこのような何かを試みることができる:あなたはこのようになりますCSVファイルを持っているのであれば

from collections import defaultdict 

d = defaultdict(list) 
for line in open("pyex.csv").readlines(): 
    line = line.strip() 
    line = line.split(",") 
    key, value = line[0], line[1:] 
    d[key] += value 
print(d) 

を。最初の列は、文字列であり、すべての列は、第2及び後の値である場合:このコードが出力しまう

crow 19 13 
bird 16 32 

defaultdict(<class 'list'>, {'crow ': ['19', '13'], 'bird': ['16', '32']}) 

これはあなたがすることができます

[0.1秒で完了しました]値はリストに含まれているので、各キーに複数の値があります。

UPDATE:

代わりsetdefaultを使用する:

d = {} 
for line in open("pyex.csv").readlines(): 
    line = line.strip() 
    line = line.split(",") 
    key = line[0] 
    for value in line[1:]: 
     d.setdefault(key, []).append(value) 
print(d) 

出力:

{'crow': ['19', '13'], 'bird': ['16', '32']} 

、あるいはCSVライブラリ

import csv 

csv_file = open("pyex.csv") 
csv_reader = csv.reader(csv_file) 

d = {} 
for line in csv_reader: 
    key = line[0] 
    for value in line[1:]: 
     d.setdefault(key, []).append(value) 
print(d) 

@martineuはあなたがdefaultdictsたりするsetdefaultsを必要としない、言ったように:

import csv 

csv_file = open("Book1.csv") 
csv_reader = csv.reader(csv_file) 

d = {} 
for line in csv_reader: 
    key = line[0] 
    d[key] = line[1:] 
print(d) 
+0

私はこれをすばやく試しましたが、次のエラーが発生しました:defaultdict(、{}) – Deuce525

+0

hmmmm、あなたのcsvファイルを見ることができれば大丈夫でしょうか?私はさらに多くの値に対応するために私の答えを編集しました。 – RoadRunner

+0

代わりに 'setdefault'を使ってみてください – RoadRunner

1

パンダの使用を検討しましたか?あなたの目標はデータではわかりませんが、それはあなたが望むことを実行する最も堅牢な方法のようです。

pandas.read_excel(path, sheetname=None)を使用すると、デフォルトで各キーがシートで、各値がそのシートのデータフレームである辞書が作成されます。次に、辞書を繰り返して、それらをすべて一緒にマージすることができます。データの擬似サンプルをより具体的にする方が簡単です。

+0

これは、データの各行にkeyとmulitpleの両方の値を割り当てることを許可していますか?たとえば、B列はすべてキーで、C、D、Eはすべて表の行ごとの値です。 – Deuce525

+0

私はあなたのデータを視覚化するのに苦労しています。これらの列は、キーに関連付ける必要がある複数のシートにまたがっていますか、または同じシート内の列だけですか?どちらの場合でも答えは「はい」です。データフレームは本質的に、行と列でデータを処理し、あらゆる種類の操作を実行できるリレーショナル構造です。 – Jeff

関連する問題