2016-08-18 19 views
0

データをExcelファイルからPython辞書に変換しようとしています。私のExcelファイルには2つの列と多数の行があります。データをExcelファイルからPython辞書に変換する

Name Age 
Steve 11 
Mike 10 
John 11 

これをキーとしてAgeを、値として辞書に追加するにはどうすればよいですか?また、多くの名前が同じ年齢である場合、それらはすべて配列内にある必要があります。たとえば:

{'11':['Steve','John'],'10':['Mike']} 

私がこれまで書いてきた何:

import xlsxwriter 
import openpyxl 

wb = openpyxl.load_workbook('demo.xlsx') 
sheet = wb.get_sheet_by_name('Sheet1') 

#print sheet.cell(row=2, column=2).value 


age_and_names = {} 

for i in range(1,11): 

    age = sheet.cell(row=i, column=2).value 
    name = sheet.cell(row=i, column=1).value 

#Problem seems to be in this general area 
    if not age in age_and_names: 
     age_and_names[age]=[] 

     age_and_names[age].append(name)  

print age_and_names 

は私が所望の出力のために何をしたでしょうか?私は非常にPythonに新しいです。すべての助けに感謝します。ありがとうございました。

答えて

1

だけの単純なインデントエラーとあなたのコードが間違っている

#Problem seems to be in this general area 
    if not age in age_and_names: 
     age_and_names[age]=[] 
     age_and_names[age].append(name)  

#Problem seems to be in this general area 
    if not age in age_and_names: 
     age_and_names[age]=[] 

    age_and_names[age].append(name)  

する必要がありますそうしないと、age_and_names[age]から以前のデータを破壊します。

あなたはキーが存在する場合、テストを避けるために、代わりにcollections.defaultdictを使用して検討する必要があります。

このように、この

from collections import defaultdict 

age_and_names = defaultdict(list) 

使用のように宣言します。

age_and_names[12].append("Mike") 

辞書がキー12を持っていない場合は、 listメソッドが呼び出され、空のリストが作成されます。キーが最初に存在するかどうかをテストする必要はありません。

+0

このコードは機能しますが、キーと値の周囲に奇妙な文字があります。 '{1L:[u'dmvyc]]、4L:[u'aorbe '、u'ebphb'、u'nprrj ']、 5L:[u'fgyfg ']、6L:[u'ralno']、7L:[u'zaysd '、u'wmklg'、u'gsdhy '、u'cqiki']} ' –

+0

これはdictの表現です、あなたはそれを取得しない各要素を印刷する場合は心配しないでください。 (uはユニコード用、Lは長整数用) –

+0

'print age_and_names [6]'を印刷しても、いいえ '[u'ralno'] ' –

1

この場合は、プレーンな辞書{}の代わりにcollections.defaultdictを使用してください。 collections.defaultdictは、新しいキーの値を作成するために使用されるファクトリ関数を使用します。各キーの空のリストを構築するためにlistを使用します。

import collections 
age_and_names = collections.defaultdict(list) 

... 
    age_and_names[age].append(name) 

ませif sは必要ありません。

関連する問題