2017-09-19 12 views
-1

辞書の理解構文を使用して辞書を作成したいと思います。条件文でリストから辞書の理解を作成する

リストlには、第1要素が常にタイムスタンプの文字列とタプルのタプルが含まれています。

これは動作します:

d = {} 
for entry in l: 
    if entry[0] not in d: 
     d[entry[0]] = [] 
    d[entry[0]].append(entry) 

これは動作しません:

d = {k[0].append(k) for k in l if k[0] in d else k[0]:k for k in l} 
    File "<stdin>", line 1 
    d = {k[0].append(k) for k in l if k[0] in d else k[0]:k for k in l} 
               ^
SyntaxError: invalid syntax 
+0

構文的に有効な形式にしても、dがまだ存在しないため、dを作成する文の中で 'k [0] in d'を実行できないため、これはややこしいことです。 – Kevin

答えて

3

あなたは、このための辞書内包表記を使用することはできません。各反復ステップ(フィルタされない場合)では、新しいキーと値のペアが生成されます。つまり、は既に生成済みの別のキーと値のペアを更新できません。

ループを貼るだけです。あなたはdict.setdefault()でそれを簡素化することができます:辞書内包表記が完了するまで、あなたの例ではdが存在しないことを

d = {} 
for entry in l: 
    d.setdefault(entry[0], []).append(entry) 

注意を。結果はdになります。より具体的には、構文エラーに対処するために、Pythonは:の前の部分をキーと値のペアでキーを生成する別個の式として認識し、for ... in ...構文はジェネレータ式(理解構文の形式)として解析されます。そのような式でifをフィルタリングすることはできますが、elseを指すエラーは理解できないため、elseという部分は理解できません。

関連する問題