2016-11-04 9 views
0

次のコードは、より大きな部分から少しです。 linesは2Dリストで、keyssは1Dリストです。行のすべての要素はキーと同じ長さです。辞書の理解の問い合わせ

datadict = [] 
for element in lines: 
    for index in range(len(element)): 
     datadict.append({keyss[index]: element[index]}) 

辞書の理解を使ってこれを書く方法があるのだろうかと思っていましたか?これは、表示されたコードが私がやっていることでうまく動作するので、好奇心の質問の多くです。私は試してきたし、道も見つけられなかった。それがどのように見えるかの構文を調べることができれば、ありがとう!

EDIT#1:応答を通じて読む

、私はそれが本当に機能していないことに気づきました。私はすべての要素が辞書の理解であるリストの理解をしようとしています。それが可能かどうか私は完全には分かりません。私はキーのすべての要素を取るディクショナリのリストを作成したいと思います。

編集#2: 私はdata_list = [{keyss[i]:row[i] for i in range(len(keyss))} for row in lines]が働くことを発見しました。

+0

あなたはリストと辞書を混乱させると思います。 'datadict'と呼ばれるものは、実際には一つのキーだけを持つ辞書を含むリストです。これは期待された結果ですか、または1つの大きな辞書を作成したいですか? –

答えて

1

辞書の理解は辞書を作成します。あなたはリスト理解をしたい:

datalist = [{keyss[index]:element[index]}) for element in lines 
      for index in range(len(element))] 

あなたは構文here上のドキュメントを見つけることができます。

0

ユージンに記載されているように、リストの理解であり、ディクテーションの理解ではありません。同じインデックスに対応するelementおよびkeyssのリストが必要な場合は、zip()を使用してコードをさらに簡素化できます。したがって、あなたの簡略化リストの内包式のようにする必要があります。

datalist = [{k: e} for elements in lines for e, k in zip(elements, keyss)] 
1

あなたの現在のコードは、辞書を作成しませんが、それはあなたの意図だった場合、これは

dict(zip(keyss, elements)) 

かによって達成することができます辞書の理解

{key: value for key, value in zip(keyss, elements)} 
関連する問題