2017-08-03 17 views
0

Excelシートのすべての行をループし、1行目のリスト内の個々の辞書に各行の値を格納します。ここではどのように私のコードですOpenpyxlで入れ子になっている辞書でリストを作成する

[{'Fruit': 'Apple', 'Quantity': 5, 'Color': 'Red', 'Cost': 0.6}] 

:私は次のように非常に最初の結果を見てみたい

Fruit: Quantity: Color: Cost 
Apple 5   Red  0.6 
Banana 6   Yellow 0.4 
Orange 4   Orange 0.3 
Kiwi 2   Green 0.1 

:列D -

私は列AからスパニングExcelの項目の単純なリストを持っています現時点を見てください:

私がコードを実行すると、最後のアクティブな行だけが出力されますシートに:

[{'Fruit': 'Kiwi', 'Quantity': 2, 'Color': 'Green', 'Cost': 0.1}] 

私はALL行については、この形式だけでなく、最終行をしたいです。私は、コードが間にあるすべての行をスキップして最終行を印刷する理由を理解していません。誰でも助けてくれますか?

答えて

2

ループ内のallFruitsに割り当てると、繰り返しごとに上書きされます。

代わりにループ外にallFruitsのリストを定義し、ループ内にallFruits.append()を呼び出して各フルーツ辞書を追加します。

allFruits = [] 

for row in range(2, sheet.max_row + 1): 
    fruit = sheet['A' + str(row)].value 
    quantity = sheet['B' + str(row)].value 
    color = sheet['C' + str(row)].value 
    cost = sheet['D' + str(row)].value 

    allFruits.append({'Fruit': fruit, 
       'Quantity': quantity, 
       'Color': color, 
       'Cost': cost}) 

また、実行して、コードを短縮することができます:

allFruits = [] 
key_col = [('Fruit', 'A'), ('Quantity', 'B'), ('Color', 'C'), ('Cost', 'D')] 

for row in range(2, sheet.max_row + 1): 
    allFruits.append({key:sheet[col+str(row)].value for (key, col) in key_col}) 
+0

これは完璧に動作し、おかげでそんなに。 –

関連する問題