使用条件语法从列表创建字典理解

pta*_*tay -1 python dictionary dictionary-comprehension

我想用字典理解语法创建一个字典.

请注意,列表l包含字符串和元组的元组,第一个元素始终是时间戳.

这有效:

d = {}
for entry in l:
    if entry[0] not in d:
        d[entry[0]] = []
    d[entry[0]].append(entry)
Run Code Online (Sandbox Code Playgroud)

这不起作用:

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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

你不能使用词典理解.对于每个迭代步骤(如果未过滤),将生成新的键值对.这意味着您无法更新另一个已生成的键值对.

坚持循环.你可以用dict.setdefault()以下方法简化它:

d = {}
for entry in l:
    d.setdefault(entry[0], []).append(entry)
Run Code Online (Sandbox Code Playgroud)

请注意,d在字典理解完成之前,您的示例将不存在; 只有这样d才能结果.更具体地说,解决了语法错误,Python将:作为单独表达式的部分视为在键值对中生成键,并且for ... in ...语法被解析为生成器表达式(一种理解语法形式); 你可以if在这样的表达式中使用来过滤,但是else在理解中没有可能的部分,因此错误指向else那里.