2017-04-11 16 views
-1

Iveは見ていましたが、私のシートを辞書に変換する簡単な解決策を見つけることができません。私のシートは、各文字列がそれ自身の行に配置され、先の列が空であるような形をしています。私は簡単にこれを辞書に変えることができますか、空のセルに値を入力する必要がありますか?Excelシートからpython dict

明快にするために編集:破線は値の前に空の列を表すためのものです。私は、データのxlsファイルとcsvファイルの両方を持っています。辞書は最初の列をキーとして保持し、次に2番目と3番目の列を「サブキー(?)」として、4番目の列を値として保持する必要があります。シートthisように見える、と私私はQTreeView

key 1 
----value 1 
--------value a 
--------value b 
--------value c 
----value 2 
--------value d 
--------value e 
key 2 
----value 3 
--------value f 
--------value g 
--------value h 
----value 4 
--------value i 
--------value j 
+1

実際には、Excelファイル( 'xls' /' xlsx'ファイルのようなもの)を持っているのですかCSVファイルですか?あなたのファイルは、あなたが記述する方法で設定されているのはなぜですか?あなたのファイルのダッシュ部分ですか?結果として得られる 'dict'はどのように見えますか? –

+0

質問に明快さを加えようとしました – Louvre

+1

'.xls'ファイルの内容はこのように見えますか? http://i.imgur.com/CsjdE91.png – davedwards

答えて

1

でこれを使用する予定の、私はこの非常に厄介な答えを投稿して恥ずかしいんだけど、それはここでの唯一の答えになるだろうから、私はそれを投稿しますとにかくスプレッドシートからそのようなネストされた辞書を構築する方法を見つけ出す唯一の方法でした。

残念ながら、それはハードコードされています - それを動的に構築するほうが、後で改善することができます。

import pprint 
pprint.pprint(d) 
    {'key 1': [{'value 1': ['value a', 'value b', 'value c']}, 
       {'value 2': ['value d', 'value e']}], 
    'key 2': [{'value 3': ['value f', 'value g', 'value h']}, 
       {'value 4': ['value i', 'value j']}]} 

より良い答えが一緒に来るまで、私はこれはやや役に立てば幸い:

import xlrd 

book = xlrd.open_workbook("data.xls") 
sh = book.sheet_by_index(0) 
d = dict(dict()) 

c1 = [str(c.value) for c in sh.col(0) if c.value != ''] 
c2 = [str(c.value) for c in sh.col(1) if c.value != ''] 
c3 = [str(c.value) for c in sh.col(2) if c.value != ''] 

val1 = c2[0] 
val2 = c2[1] 
val3 = c2[2] 
val4 = c2[3] 

v1 = {val1: c3[0:3]} 
v2 = {val2: c3[3:5]} 
v3 = {val3: c3[5:8]} 
v4 = {val4: c3[8:10]} 

k1 = {c1[0]: [v1, v2]} 
k2 = {c1[1]: [v3, v4]} 

d.update(k1) 
d.update(k2) 

次に、辞書を印刷します。

+0

@ルーヴルあなたはまだ行を動的にしようとしましたか? – davedwards

関連する問題