2017-04-23 13 views
0

Excelスプレッドシートの情報を辞書に整理しようとしています。ここでスプレッドシートが構成されている方法の例です:Excelスプレッドシートの列に基づいて辞書を編成する方法

Col 1  Col 2 
Hello  World 
Hello  Earth 
Hello  Planet 
Hello  Mars 
Hello  Moon 
Hi  Pluto 
Hi  Neptune 
Hi  Jupiter 

私は現在、このように見て、それに結果リストに各列をインポートPythonコードを、持っている:

['Hello', 'Hello', 'Hello', 'Hi', 'Hi', etc] 
['World', 'Earth', 'Planet', 'Mars', 'Moon', etc] 

私の最終目標でありますそれぞれのキー(Col1の内容)にマッピングされている複数の値のリスト(Col2の内容)を保持するPython辞書を持つことです。例:

{ 
    'Hello': ['World', 'Earth', 'Planet', 'Mars', 'Moon'] 
    'Hi': ['Pluto', 'Neptune', 'Jupiter'] 
} 

これを実行するにはどうすればよいですか?

+0

[Excelスプレッドシートの内容の辞書を作成するにはどうすればいいですか?](http://stackoverflow.com/questions/43574918/how-to-create-a-dictionary-of-the-contents- of-an-excel-spreadsheet) –

答えて

1

あなたはすでにあなたのようなリストの2つの列がある場合:

>>> col1 = ['Hello', 'Hello', 'Hello', 'Hi', 'Hi'] 
>>> col2 = ['World', 'Earth', 'Planet', 'Mars', 'Moon'] 

は、単に通常のdictsetdefaultメソッドを使用する(または、あなたもcollections.defaultdictを使用することができます)

>>> map = {} 
>>> for key, element in zip(col1, col2): 
...  map.setdefault(key, []).append(element) 
... 
>>> map 
{'Hello': ['World', 'Earth', 'Planet'], 'Hi': ['Mars', 'Moon']} 
>>> 
0

と仮定すると、 col1およびcol2は、列の値のリストです。

​​3210

zip(col1, col2)は、あなたが得るように、我々はこのリストをループそして...、

[('Hello','World'),('Hello','Earth'),....] 

を二つのリストをマージし、それが存在しない場合は、辞書にキーを追加、または単にその場合は、リストに追加しますです。

+0

あなたのやり方はうまくいくが、 'key'は辞書の中で複数回検索される必要があり、これは最適ではない。 – martineau

関連する問題